Utilisation d'OpenID Connect pour étendre OAuth 2.0
OpenID Connect étend le protocole OAuth 2.0 pour ajouter une couche d'authentification et d'identité simple qui se trouve au-dessus de OAuth 2.0.
Utilisez OpenID Connect lorsque vous souhaitez que vos applications basées sur le nuage obtiennent des informations d'identité, extraient des détails sur l'événement d'authentification (par exemple, quand, où et comment l'authentification s'est produite) et autorisent l'authentification unique fédérée.
OAuth 2.0 fournit des jetons de sécurité à utiliser lors de l'appel de ressources dorsales au nom d'un utilisateur. OAuth permet à une subvention ou à une licence d'accéder aux ressources plutôt que de fournir des informations sur l'authentification elle-même. L'utilisation de OAuth pour l'authentification est comme un gestionnaire d'appartement donnant à quelqu'un qui veut connaître votre identité une clé temporaire de votre appartement. La clé implique seulement le droit d'entrer dans l'appartement pour une durée spécifique. Cela ne signifie pas que l'individu est le propriétaire.
L'utilisation d'OpenID Connect complète l'image en fournissant aux applications des informations sur l'utilisateur, le contexte de leur authentification et l'accès aux informations de leur profil. OpenID Connect permet aux clients de tous types, y compris les clients Web, mobiles et JavaScript, de demander et de recevoir des informations sur les sessions authentifiées et les utilisateurs finaux. Voir OpenID Connect pour plus d'informations.
Jeton d'ID OpenID Connect : Ce jeton contient des informations sur la session authentifiée de l'utilisateur.
Point d'extrémité UserInfo : Ce point d'extrémité permet au client d'extraire des attributs supplémentaires sur l'utilisateur.
Mise en oeuvre d'OpenID Connect
Trois actions principales sont requises pour mettre en oeuvre OpenID Connect :
-
Obtenir un jeton d'ID OpenID Connect : Utilisez un type d'autorisation OAuth2 pour demander un jeton d'ID OpenID Connect en incluant l'étendue
openid
dans la demande d'autorisation.Les cas d'utilisation suivants fournissent des exemples de demandes et de réponses pour obtenir le jeton d'identification.
-
Valider le jeton d'identification : Valider le jeton d'identification pour s'assurer qu'il provient d'un émetteur approuvé et que le contenu n'a pas été altéré pendant le transit.
Le cas d'utilisation suivant fournit des informations sur comment et quoi valider.
-
Extraire les informations de profil à partir du point d'extrémité
UserInfo
: À l'aide du jeton d'accès OAuth2, accédez au point d'extrémitéUserInfo
pour extraire les informations de profil sur l'utilisateur authentifié.Le cas d'utilisation suivant fournit des exemples de demandes et de réponses pour extraire des informations de profil à partir du point d'extrémité
UserInfo
.
Jeton d'identité
Un jeton d'identité est un jeton autonome sécurisé pour l'intégrité (au format JWT (JSON Web Token)), défini dans la norme OpenID Connect contenant des revendications concernant l'utilisateur final. Le jeton d'identité est l'extension principale d'OpenID Connect vers OAuth 2.0 pour activer l'authentification dans un domaine d'identité.
Le jeton d'identité JWT se compose de trois composants, un en-tête, des données utiles et de la signature numérique. Suivant la norme JWT, ces trois sections sont codées en Base64URL et séparées par des points.
Les demandes OpenID Connect doivent contenir la valeur de portée
openid
. OpenID Connect 1.0 est une couche d'identité simple au-dessus du protocole OAuth 2.0. Il permet à une application client de domaine d'identité IAM (enregistrée en tant que client OAuth 2 avec ID client et clé secrète client) de vérifier l'identité de l'utilisateur final en fonction de l'authentification effectuée par un serveur d'autorisation (AS), et d'obtenir des informations de profil de base sur l'utilisateur final de manière interopérable et similaire à REST. OpenID Connect permet aux clients de tous types, y compris les clients Web, mobiles et JavaScript, de demander et de recevoir des informations sur les sessions authentifiées et les utilisateurs finaux. Voir OpenID Connect pour plus d'informations.
Nom | Valeur |
---|---|
amr
|
Références des méthodes d'authentification. Tableau JSON de chaînes qui sont des identificateurs pour les méthodes d'authentification utilisées dans l'authentification. Par exemple, les valeurs peuvent indiquer que les méthodes d'authentification par mot de passe et par mot de passe à usage unique ont été utilisées. |
at_hash
|
Valeur de hachage du jeton d'accès OAuth 2. |
aud
|
Identifie les destinataires auxquels ce jeton d'ID est destiné. Doit être la valeur OAuth 2.0 client_id (spécification OpenID Connect). Il s'agit du nom du client OAuth (app.name) qui effectue la demande. Aud contient également l'émetteur du domaine d'identité IAM, transformant ainsi le type de jeton (TI) en une assertion d'utilisateur de domaine d'identité IAM. |
authn_strength*
|
Valeur retournée par l'authentification unique en nuage indiquant la force d'authentification à partir du contexte AuthN. |
auth_time
|
Heure (heure d'époque UNIX) à laquelle l'authentification unique en nuage a réellement authentifié l'utilisateur (en secondes, en provenance du contexte AuthN). |
azp
|
Partie autorisée. Partie à laquelle le jeton d'identification a été émis. S'il est présent, il DOIT contenir l'ID client OAuth 2.0 de cette partie. Cette réclamation n'est nécessaire que lorsque le jeton d'identification a une valeur d'audience unique et que cette audience est différente de la partie autorisée. Il peut être inclus même lorsque la partie autorisée est la même que le seul public. La valeur azp est une chaîne sensible à la casse qui contient une valeur StringOrURI. |
exp
|
Heure d'expiration (heure UNIX) à partir de laquelle le jeton d'identification ne doit pas être accepté pour le traitement. Cette valeur doit être identique à session_exp. . |
iat
|
Heure (heure UNIX) à laquelle le JWT a été créé (en secondes). L'heure d'époque UNIX est un nombre JSON représentant le nombre de secondes entre 1970-01-01T0 :0:0Z, mesuré en temps universel coordonné (UTC) et la date/heure. |
iss
|
Principal ayant émis le jeton : https://<domainURL>
|
jti
|
Identificateur unique généré par le serveur pour l'ID JWT. |
nonce
|
Valeur de chaîne utilisée pour associer une session client à un jeton d'ID et pour atténuer les attaques de réexécution. Cette valeur est fournie par Cloud Gate. |
session_exp*
|
Heure (heure d'époque UNIX) à laquelle la session d'authentification unique en nuage expire (en secondes, elle doit être identique à l'expiration de la session d'authentification unique dans le contexte AuthN). |
sid
|
ID session à partir de l'authentification unique en nuage (255 caractères ASCII au maximum) dans le contexte AuthN. |
sub
|
Identifie l'utilisateur. L'identificateur de sujet est localement unique, jamais réaffecté, et est destiné à être consommé par le client : ID de connexion d'utilisateur (255 caractères ASCII maximum). Il s'agit de l'ID connexion de l'utilisateur à partir du contexte AuthN. |
sub_mappingattr*
|
Attribut utilisé pour rechercher le sous-magasin d'ID. |
tok_type*
|
Identifie le type de jeton : IT |
user_displayname*
|
Nom d'affichage de l'utilisateur (255 caractères ASCII au maximum) à partir du contexte AuthN. |
user_csr*
|
Indique (Vrai) que l'utilisateur est un représentant du service à la clientèle. |
user_id*
|
GUID du domaine d'identité IAM de l'utilisateur à partir du contexte AuthN. |
user_lang*
|
Langue de préférence de l'utilisateur. |
user_locale*
|
Paramètres régionaux de l'utilisateur. |
user_tenantname*
|
Nom du locataire de l'utilisateur (255 caractères ASCII au maximum). Le GUID du locataire n'est spécifiquement pas enregistré dans le jeton |
user_tz*
|
Fuseau horaire de l'utilisateur. |
Validation du jeton d'identité
Pourquoi validons-nous les jetons? Lorsque votre application Web vérifie directement les données d'identification, elle vérifie que le nom d'utilisateur et le mot de passe présentés correspondent à ce que vous tenez à jour. Lorsque vous utilisez une identité basée sur des réclamations, vous sous-traitez cette tâche à un fournisseur d'identités.
La responsabilité passe de la vérification des données d'identification brutes à la vérification que le demandeur a passé par votre fournisseur d'identités privilégié et a réussi l'authentification. Le fournisseur d'identités a réussi l'authentification en émettant un jeton. Avant de pouvoir utiliser les informations ou de s'en fier comme assertion que l'utilisateur s'est authentifié, vous devez les valider.
OpenID Document d'exploration
Le protocole OpenID Connect 1.0 est une simple couche d'identité au-dessus du protocole OAuth 2.0 qui nécessite l'utilisation de plusieurs points d'extrémité pour authentifier les utilisateurs et pour demander des ressources qui incluent des informations sur les utilisateurs, des jetons et des clés publiques. Pour vous aider à découvrir quels sont ces points d'extrémité que vous devez utiliser, OpenID Connect vous permet d'utiliser un document de repérage, qui est un document JSON trouvé à un emplacement bien connu. Ce document de détection contient des paires clé-valeur qui fournissent des détails sur la configuration du fournisseur OpenID Connect, notamment les URI des points d'extrémité d'autorisation, de jeton, d'info utilisateur et de clés publiques. Vous pouvez extraire le document de détection pour le service OpenID Connect du domaine d'identité IAM à partir de : https://<domainURL>/.well-known/openid-configuration.
Validation des jetons d'identité
Un jeton d'identité (ID) est un jeton autonome sécurisé pour l'intégrité (au format de jeton Web JSON) qui contient des revendications concernant l'utilisateur final. Il s'agit de la session d'un utilisateur authentifié. Par conséquent, le jeton doit être validé avant qu'une application puisse faire confiance au contenu du jeton d'ID. Par exemple, si un attaquant malveillant a réexécuté le jeton d'identification d'un utilisateur qu'il avait capturé précédemment, l'application doit détecter que le jeton a été réexécuté ou qu'il a été utilisé après son expiration et refuser l'authentification.
-
Vérifiez que la valeur de la revendication d'audience (
aud
) contient la valeurclient_id
de l'application. La revendicationaud
(audience) peut contenir un tableau avec plusieurs éléments. Le jeton d'ID doit être rejeté si le jeton d'ID ne liste pas le client en tant qu'audience valide, ou s'il contient des audiences supplémentaires qui ne sont pas approuvées par le client. -
Vérifiez que l'heure courante est antérieure à l'heure représentée par la revendication de délai d'expiration (
exp
). -
Vérifiez que le jeton d'identification est correctement signé par l'émetteur. Les jetons émis par le domaine d'identité sont signés à l'aide d'un des certificats trouvés à l'URI spécifié dans le champ
jwks_uri
du document de détection.-
Extrayez le certificat public du locataire à partir du point d'extrémité
SigningCert/jwk
(par exemple,https://acme.identity.oraclecloud.com/admin/v1/SigningCert/jwk
).Note
Comme les domaines d'identité changent rarement de clé publique, vous pouvez mettre en mémoire cache les clés publiques et, dans la plupart des cas, effectuer efficacement une validation locale. Cela nécessite l'extraction et l'analyse des certificats et l'exécution des appels cryptographiques appropriés pour vérifier la signature : -
Utilisez toutes les bibliothèques JWT disponibles pour valider, par exemple, la bibliothèque JWT Nimbus de Connect2id pour Java. Voir JWT pour obtenir la liste des bibliothèques disponibles.
Note
En cas d'échec de la validation de la signature, pour empêcher les récupérations constantes en cas d'attaques avec de faux jetons, la réextraction/remise en mémoire cache de la clé publique doit être basée sur un intervalle de temps, tel que 60 minutes, de sorte que les récupérations ne se produisent que toutes les 60 minutes.
Exemple
package sample; import java.net.MalformedURLException; import java.net.URL; import com.nimbusds.jose.JWSAlgorithm; import com.nimbusds.jose.jwk.source.JWKSource; import com.nimbusds.jose.jwk.source.RemoteJWKSet; import com.nimbusds.jose.proc.JWSKeySelector; import com.nimbusds.jose.proc.JWSVerificationKeySelector; import com.nimbusds.jose.proc.SecurityContext; import com.nimbusds.jwt.JWTClaimsSet; import com.nimbusds.jwt.proc.ConfigurableJWTProcessor; import com.nimbusds.jwt.proc.DefaultJWTProcessor; public class TokenValidation { public static void main(String[] args) { try { String tokenValue = "eyJ4NXQjUzI1....W9J4oQ"; ConfigurableJWTProcessor jwtProcessor = new DefaultJWTProcessor(); // change t JWKSource keySource = new RemoteJWKSet(new URL("https://<domainURL>/admin/v1/SigningCert/jwk")); // The expected JWS algorithm of the token (agreed out-of-band) JWSAlgorithm expectedJWSAlg = JWSAlgorithm.RS256; // Configure the JWT processor with a key selector to feed matching public // RSA keys sourced from the JWK set URL JWSKeySelector keySelector = new JWSVerificationKeySelector(expectedJWSAlg, keySource); jwtProcessor.setJWSKeySelector(keySelector); // Process the token SecurityContext ctx = null; // optional context parameter, not required here JWTClaimsSet claimsSet = jwtProcessor.process(tokenValue, ctx); // Print out the token claims set System.out.println(claimsSet.toJSONObject()); } catch (Exception e) { e.printStackTrace(); } } }
-
-
Vérifiez que la valeur de la revendication d'identificateur d'émetteur (
iss
) correspond exactement à la valeur de la revendicationiss
(émetteur) :https://<domainURL>/
Interrogation du point d'extrémité UserInfo
Le point d'extrémité OpenID Connect UserInfo
est utilisé par une application pour extraire des informations de profil sur l'identité authentifiée. Les applications peuvent utiliser ce point d'extrémité pour extraire des informations de profil, des préférences et d'autres informations propres à l'utilisateur.
Le profil OpenID Connect comprend deux composants :
-
Réclamations décrivant l'utilisateur
-
Point d'extrémité
UserInfo
fournissant un mécanisme pour extraire ces revendicationsNote
Les revendications d'utilisateur peuvent également être présentées dans le jeton d'ID pour éliminer un rappel lors de l'authentification.
Réclamations de profil d'utilisateur
Le point d'extrémité UserInfo
fournit un jeu de revendications basé sur les portées OAuth2 présentées dans la demande d'authentification. OpenID Connect définit cinq valeurs de portée qui sont mappées à un jeu spécifique de revendications par défaut :
Portée OpenID Connect | Réclamations retournées |
---|---|
openid |
Aucun - Indique qu'il s'agit d'une demande OpenID Connect |
profil |
nom, family_name, given_name, middle_name, surnom, preferred_username, profil, photo, site Web, sexe, date de naissance, zoneinfo, paramètres régionaux, updated_at |
adresse |
adresse |
courriel |
courriel, email_verified |
téléphone |
phone_number, phone_number_verified |
Le client doit présenter ses données d'identification et un jeton d'accès. Le jeton d'accès présenté doit contenir la portée openid
.
Si une portée est omise (par exemple, la portée email
n'est pas utilisée), la revendication (email
) ne sera pas présente dans les revendications retournées.
Exemple de demande de point d'extrémité UserInfo
Une fois que l'application client a authentifié un utilisateur et dispose du jeton d'accès, le client peut alors faire une demande au point d'extrémité UserInfo
pour extraire les attributs demandés sur un utilisateur. L'exemple suivant présente un exemple de demande.
curl -i
-H 'Content-Type: application/x-www-form-urlencoded'
-H 'Authorization: Bearer eyJ4NXQjUzI1....rtApFw'-H 'Accept: */*'
-H 'Content_Language: en-US'--request GET https://<domainURL>/oauth2/v1/userinfo
Exemple de réponse
Une réponse réussie retourne une réponse HTTP 200 OK et les revendications de l'utilisateur au format JSON :
{
"birthdate":"",
"email":"user@example.com",
"email_verified":false,
"family_name":"user",
"gender":"",
"given_name":"user",
"appRoles":[],
"name":"alice alice",
"preferred_username":"user@example.com",
"sub":"user@example.com",
"updated_at":1495136783,"website":""
}
Pour que l'application client puisse faire confiance aux valeurs retournées par le point d'extrémité UserInfo
(par exemple, pour vérifier l'attaque de substitution de jeton), le client doit vérifier que la revendication sub
retournée par la demande de point d'extrémité UserInfo
correspond à l'objet du jeton d'ID.
Utilisation du flux de code d'autorisation avec OpenID Connect
Utilisez le flux de code d'autorisation lorsque vous avez des clients qui peuvent gérer en toute sécurité une clé secrète client entre eux et le serveur d'autorisation. Le flux de code d'autorisation retourne un code d'autorisation au client, qui peut ensuite échanger le code contre un jeton d'identification et un jeton d'accès directement.
Cela vous donne l'avantage de ne pas exposer de jetons à l'agent utilisateur (comme un navigateur Web) et éventuellement à d'autres applications malveillantes ayant accès à l'agent utilisateur. Le serveur d'autorisation peut également authentifier le client avant d'échanger le code d'autorisation pour un jeton d'accès. Le flux Code d'autorisation fonctionne avec les clients confidentiels et les clients publics.
Clients confidentiels
Demandez le code d'autorisation. Dans cette demande, la valeur du paramètre de portée est
openid.
Il s'agit d'une valeur de spécification OpenID Connect.Exemple de demande
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid
Exemple de réponse
https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA=
Vous pouvez fournir des valeurs de portée supplémentaires dans vos demandes, par exemple :
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=phone+openid+offline_access+profile+address+email
Cette demande contient l'étendue des ressources openid et OAuth :
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=http://<domainURL>/api+openid
Demandez le jeton. Le client extrait le paramètre de code de la réponse et effectue la demande de jeton. En outre, le client fournit son ID client et sa clé secrète dans l'en-tête d'authentification de base.
Exemple de demande
curl -i -H 'Authorization: Basic ZWE1OGIwNDA0N2ZkNGQ4MTgyYThiYWQ0ZTNkMGFmZjU6ZGMxNGE4MjMtZGU2OC00YWNhLTg1OWUtMWNhZTJmNjQ0NTBi' -H 'Accept: */*' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAXv9lZQ???.jF9NCA'
Exemple de réponse
La demande contient à la fois le jeton d'accès et le jeton d'ID.
{ "access_token":"eyJ4NXQjUzI1???.xhtnbw", "token_type":"Bearer", "expires_in":27261, "id_token":"eyJ4NXQjUzI1???.._XLqUw" }
Clients publics
Les clients publics n'ont pas de données d'identification, ils ont plutôt un identificateur de client. Le flux Authorization Code comprend deux étapes. Les demandes impliquent une demande GET basée sur un navigateur, puis une demande POST de canal dorsal pour obtenir le jeton d'accès.
-
Demandez le code d'autorisation.
Exemple de demande
GET https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid&nonce=<nonce-value>&state=1234
Exemple de réponse
Note
Ces exemples de demande et de réponse sont similaires à la demande du client confidentiel et aux réponses décrites précédemment.https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA=
-
Demandez le jeton.
Exemple de demande
Note
Cette demande est différente de la demande de client confidentiel dans laquelle l'ID client et la clé secrète client sont spécifiés dans l'en-tête d'authentification de base. Dans le flux de client public, il n'y a pas d'en-tête d'authentification de base. L'ID client est spécifié dans les données utiles de la demande.curl -i -H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8' --request POST https://<domainURL>/oauth2/v1/token -d 'grant_type=authorization_code&code=<authz-code>&reidrect_uri=<client-redirect-uri>&client_id=<client-id>'
Exemple de réponse
{ "access_token":"eyJ4NXQjUzI1???.xhtnbw", "token_type":"Bearer", "expires_in":27261, "id_token":"eyJ4NXQjUzI1???.._XLqUw" }
Utiliser le flux implicite avec OpenID Connect
Utilisez le flux implicite lorsque vous avez mis en oeuvre un client basé sur un navigateur à l'aide d'un langage de script tel que JavaScript. Le jeton d'accès et le jeton d'identification sont retournés directement au client, ce qui peut exposer ces jetons à l'utilisateur et aux applications qui ont accès à l'agent utilisateur de l'utilisateur (comme un navigateur Web).
Authorization
et le point d'extrémité token
n'est pas utilisé. Le flux implicite fonctionne avec des clients confidentiels, fiables et publics.Les clients publics n'ont pas de données d'identification, mais seulement un identificateur de client.
Les valeurs response_type
suivantes sont prises en charge avec le flux implicite :
-
id_token
(Jeton d'ID) -
token
(Jeton d'accès) -
id_token token
(jeton d'ID et jeton d'accès)
Obtention d'un jeton d'ID
Demandez le jeton.
Exemple de demande
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefg
L'utilisateur se connecte et donne son consentement (en fonction des portées demandées)
Réponse avec un jeton d'ID
Exemple de réponse
Note
Tous les paramètres de réponse sont ajoutés au composant fragment de l'URI de redirection.https://<domainURL>/#id_token=eyJ4NXQjUzI1.....gF5uyQ
Obtention d'un jeton d'accès
Le flux implicite comprend trois étapes pour obtenir un jeton d'accès :
-
Demandez le jeton d'accès.
Exemple de demande
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile
-
L'utilisateur se connecte et donne son consentement (en fonction des portées demandées).
-
Réponse avec jeton d'accès
Exemple de réponse
Note
Tous les paramètres de réponse sont ajoutés au composant fragment de l'URI de redirection.https://<domainURL>/#access_token=eyJ4NXQjUzI1...4WGvJQ&token_type=Bearer&expires_in=3600
Obtention d'un jeton d'identification et d'un jeton d'accès
Demandez le jeton d'ID et le jeton d'accès.
Exemple de demandehttps://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefghijkl
L'utilisateur se connecte et donne son consentement (en fonction des portées demandées).
Réponse avec un jeton d'accès et un jeton d'ID.
Exemple de réponseNote
Tous les paramètres de réponse sont ajoutés au composant fragment de l'URI de redirection.https://<domainURL>/#access_token=eyJ4NXQjUzI....XWGmeQ&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=3600
Utilisation du flux hybride avec OpenID Connect
Utilisez le flux hybride lorsque vous souhaitez obtenir des jetons séparément du canal avant et du canal arrière. Par exemple, vous disposez d'un composant de navigateur tel que JavaScript et d'un composant de serveur dorsal tel que Node.js. Le composant de navigateur obtient le code d'autorisation et le jeton d'identification et peut ensuite personnaliser le contenu de l'interface utilisateur. Le composant dorsal obtient le jeton d'accès pour effectuer des appels d'API de gestion.
Les clients doivent prendre en charge les demandes et les réponses basées sur un navigateur, ainsi que les demandes et les réponses programmatiques/back-canal pour utiliser le flux hybride. Le flux hybride fonctionne avec les clients confidentiels et les clients publics. Les valeurs response_type
suivantes sont prises en charge avec le flux hybride :
-
code id_token
(jeton d'ID) -
code token
(Jeton d'accès) -
code id_token token
(Code d'autorisation, jeton d'ID et jeton d'accès)
Obtention d'un jeton d'ID
Demandez le code d'autorisation et le jeton d'ID.
Exemple de demande
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code id_token&redirect_uri=<client_redirect_uri>&scope=http://<domainURL>/test+openid+offline_access&nonce=abcdefghijk
L'utilisateur se connecte et donne son consentement (en fonction des portées demandées).
Réponse avec un jeton d'ID et un code d'autorisation.
Exemple de réponse
Note
Tous les paramètres de réponse sont ajoutés au composant fragment de l'URI de redirection.https://<domainURL>/#code=AQIDBAUrAi0l....F9NCA=&id_token=eyJ4NXQjUzI1....3R8b_Q
L'application client utilise le code d'autorisation et effectue une demande de canal dorsal pour obtenir un nouveau jeton d'accès et des jetons d'actualisation.
Exemple de demande
curl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAUrAi0l???.CA%3D'
Exemple de réponse
{ "access_token":"eyJ4NXQjUzI1....sJ5mCw", "token_type":"Bearer", "expires_in":3600, "refresh_token":"AQIDBAUwxxoC....tZLvA" }
Obtention d'un jeton d'accès
Le flux hybride comporte quatre étapes pour obtenir le code d'autorisation et le jeton d'accès :
-
Demandez le code d'autorisation et le jeton d'accès.
Exemple de demande
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code token&redirect_uri=<client_redirect_uri>&scope=http://<domainURL>/test
-
L'utilisateur se connecte et donne son consentement (en fonction des portées demandées).
-
Réponse avec un jeton d'ID et un code d'autorisation.
Exemple de réponse
Note
Tous les paramètres de réponse sont ajoutés au composant fragment de l'URI de redirection.https://<domainURL>/#access_token=eyJ4NXQjUzI1....Pudw9A&code=AQIDBAU6d6Ae....F9NCA=&token_type=Bearer&expires_in=3600
-
L'application client utilise le code d'autorisation et effectue une demande de canal arrière pour obtenir un nouveau jeton d'accès.
Exemple de demandecurl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*'' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAU6d6Ae...NCA%3D'
Exemple de réponse
{ "access_token":"eyJ4NXQjUzI1....Tgs9LA", "token_type":"Bearer", "expires_in":3600 }
Obtention d'un jeton d'identification et d'un jeton d'accès
Demandez le code d'autorisation et le jeton d'ID.
Exemple de demandehttps://<domainURL>/oauth2/v1/authorize?client_id=client_id&response_type=cod id_token token&redirect_uri=client_redirect_uri&scope=http://<domainURL>/test+openid&nonce=abcdaer
L'utilisateur se connecte et donne son consentement (en fonction des portées demandées).
Réponse avec un jeton d'ID et un jeton d'accès.
Exemple de réponseNote
Tous les paramètres de réponse sont ajoutés au composant fragment de l'URI de redirection.https://<domainURL>/#access_token=eyJ4NXQjUzI1....sDB7lA&code=AQIDBAVxZzy-....F9NCA=&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=36004
L'application client utilise le code d'autorisation et effectue une demande de canal arrière pour obtenir un nouveau jeton d'accès.
Exemple de demandecurl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*' ?request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAXUbLmS???.NCA%3D'
Exemple de réponse
{ "access_token":"eyJ4NXQjUzI1....g52XmQ", "token_type":"Bearer", "expires_in":3600, "id_token":"eyJ4NXQjUzI1....f6JfWA" }
Utilisation d'OpenID Connect pour la déconnexion
Vous pouvez utiliser OpenID Connect pour les demandes de déconnexion basées sur un navigateur.
Vous pouvez demander une déconnexion de deux façons à l'aide d'OpenID Connect :
-
Redirection vers le client qui a lancé la déconnexion.
Note
Assurez-vous de définir l'URI de redirection après déconnexion pour l'application client OAuth et que le jeton d'ID est envoyé dans la demande. Le jeton d'ID contient l'ID client. L'URL de déconnexion correspondante de cet ID client est extraite et validée.Exemple de demande
https://<domainURL>/oauth2/v1/userlogout?post_logout_redirect_uri=http://clienthost:port/myapp/return&state=c3004d28&id_token_hint=<IDToken>
-
Utilisez la page de renvoi du locataire.
Note
Cette action utilise la page de renvoi du locataire qui a été définie dans les paramètres d'authentification unique du locataire.Exemple de demande
https://<domainURL>/oauth2/v1/userlogout