Fournisseur OIDC

Le fournisseur OIDC peut être défini pour utiliser Maverics en tant que fournisseur d’identité OIDC. Actuellement, le fournisseur OIDC prend en charge les types d’autorisation d’accès suivants : authorization_code, client_credentials et refresh_token.

Options de configuration

Discovery

discovery définit la configuration d’OIDC Discovery.

Issuer

issuer correspond au domaine auquel les jetons seront attribués. Le domaine « Issuer » est une URL sensible à la casse utilisant le schéma https et contenant les éléments suivants : schéma, hôte et, éventuellement, numéro de port et chemin d’accès, mais aucun élément de requête ou de fragment.

L’émetteur du fournisseur OIDC (qui est généralement obtenu au cours de la phase « Discovery ») doit correspondre exactement à la valeur de la réclamation iss (émetteur) dans le jeton d’identification.

Endpoints

endpoints définit l’emplacement où les terminaux OIDC sont servis.

Well-Known

wellKnown correspond au terminal où le fournisseur OIDC répondra aux demandes de métadonnées. Ce terminal peut être utilisé pour découvrir les terminaux exposés par le serveur, les champs d’application disponibles auprès du serveur et les algorithmes permettant de signer et/ou de chiffrer les jetons d’accès et d’identification.

Cela correspond à la section 3 d’OpenID Connect Discovery 1.0.

JWKS

jwks correspond au terminal où le fournisseur OIDC renvoie des informations concernant l’ensemble de clés Web JSON (JWK) utilisées pour signer les JWT.

Cela correspond au document RFC 7517: JSON Web Key (JWK).

Authorization

auth correspond correspond au terminal où le fournisseur OIDC répondra à la demande d’autorisation OAuth 2.0 en vue d’authentifier l’utilisateur final.

Cela correspond à la section 3.1.2 d’OpenID Connect Core 1.0.

Token

token correspond au terminal où le fournisseur OIDC répondra à la partie utilisatrice avec un jeton d’accès et un jeton d’identification.

Cela correspond à la section 3.1.3 d’OpenID Connect Core 1.0.

Userinfo

userinfo correspond au terminal où le fournisseur OIDC renverra les réclamations relatives à l’utilisateur final authentifié. S’il est disponible, le terminal renverra les réclamations associées à l’un des champs d’application suivants : profile, openid, phone, email et address.

Si l’option claimsMapping a été définie pour le client correspondant, ces mappages seront appliqués à la réponse userinfo.

Cela correspond à la section 5.3 d’OpenID Connect Core 1.0.

Le lien entre les champs d’application et les réclamations est défini dans la section 5.4 d’OpenID Connect Core 1.0.

Introspect

introspect correspond au terminal où le fournisseur OIDC renvoie les réclamations relatives au jeton d’accès qui fait l’objet de l’introspection.

Cela correspond au document RFC 7662, OAuth 2.0 Token Introspection.

Revoke

revoke correspond au terminal où le fournisseur OIDC répondra aux demandes de révocation de jeton OAuth 2.0, en révoquant l’utilisation du jeton d’actualisation ou d’accès spécifié.

Cela correspond à la section 2 du document RFC 7009.

End Session

endSession correspond au terminal où le fournisseur OIDC répondra à la demande de déconnexion initiée par le fournisseur de ressources.

Cela correspond au document OpenID Connect RP-Initiated Logout RFC.

JWKS

jwks constitue une liste de clés utilisées pour la signature des jetons. La clé figurant en tête de liste sera utilisée pour la signature. Toutes les clés publiques seront disponibles à la consommation au niveau du terminal JWKS.

Algorithm

algorithm représente l’algorithme de chiffrement utilisé pour générer la paire de clés. Actuellement, seul RSA256 est pris en charge.

Private Key

privateKey correspond à la clé privée encodée au format PEM. Ce champ peut éventuellement être chargé à partir d’un fournisseur de secrets.

Extension de service BuildUserInfoClaims

buildUserInfoClaimsSE est une extension de services optionnelle permettant de personnaliser les demandes renvoyées par le terminal userinfo. L’argument session fourni dans l’extension de services pointe vers les attributs de session associés à l’utilisateur requis.

⚠️
En tant qu’auteur d’une extension de services, vous êtes responsable de son comportement et devez vous assurer que la réponse est conforme à la spécification.

Exemples

Exemple de configuration de base du fournisseur OIDC

oidcProvider:
  discovery:
    issuer: https://maverics.sonarsystems.com
    endpoints:
      wellKnown: https://maverics.sonarsystems.com/.well-known/openid-config
      jwks: https://maverics.sonarsystems.com/.well-known/jwks.json
      auth: https://maverics.sonarsystems.com/oauth2/auth
      token: https://maverics.sonarsystems.com/oauth2/token
      userinfo: https://maverics.sonarsystems.com/userinfo
      introspect: https://maverics.sonarsystems.com/introspect
      revoke: https://maverics.sonarsystems.com/revoke
  jwks:
    - algorithm: RSA256
      privateKey: <authorizationServerPrivateKey>

Exemple de configuration de base du fournisseur OIDC avec extension de service

oidcProvider:
  discovery:
    issuer: https://maverics.sonarsystems.com
    endpoints:
      wellKnown: https://maverics.sonarsystems.com/.well-known/openid-config
      jwks: https://maverics.sonarsystems.com/.well-known/jwks.json
      auth: https://maverics.sonarsystems.com/oauth2/auth
      token: https://maverics.sonarsystems.com/oauth2/token
      userinfo: https://maverics.sonarsystems.com/userinfo
      introspect: https://maverics.sonarsystems.com/introspect
      revoke: https://maverics.sonarsystems.com/revoke
      endSession: https://maverics.sonarsystems.com/oidc/logout
  jwks:
    - algorithm: RSA256
      privateKey: <authorizationServerPrivateKey>
  buildUserInfoClaimsSE:
    funcName: BuildUserInfoClaims
    file: /etc/maverics/extensions/auth.go

/etc/maverics/extensions/auth.go

package main

import (
	"net/http"

	"github.com/strata-io/service-extension/orchestrator"
)

func BuildUserInfoClaims(api orchestrator.Orchestrator, _ *http.Request) (map[string]any, error) {
	session, err := api.Session()
	if err != nil {
		logger.Error("se", "unable to retrieve session", "error", err.Error())
		return nil, err
	}
	groups, err := session.GetString("okta.groups")
	return map[string]any{
		"groups": groups,
	}, err
}