Portées
À l'aide du paramètre d'étendue, le jeton d'accès peut accorder différents niveaux d'accès à plusieurs API de domaine d'identité IAM.
Les portées permettent de définir un jeu de ressources et d'opérations qu'un jeton d'accès autorise. Les portées représentent une intention. Lorsqu'un client demande un jeton d'accès, les étendues demandées indiquent le type de fonctionnalité qu'un client veut utiliser lors de la présentation du jeton d'accès.
En outre, différents types d'application utilisent des droits de jeton d'accès différents. Les applications de confiance (telles que les services dorsaux) peuvent demander des jetons d'accès directement pour le compte des utilisateurs. Les applications Web doivent généralement d'abord valider l'identité de l'utilisateur et éventuellement obtenir le consentement de l'utilisateur.
Utilisez l'étendue urn:opc:idm:__myscopes__ lorsque vous avez besoin d'obtenir un jeton d'accès contenant toutes les étendues de domaine d'identité autorisées. Les jetons d'accès qui contiennent toutes les étendues de domaine d'identité applicables en fonction des privilèges représentés par les rôles d'application de domaine d'identité accordés au client demandeur et à l'utilisateur spécifié par la demande du client (le cas échéant). Cette étendue n'est accordée directement à aucun rôle d'administrateur de domaine d'identité.
Utilisez l'étendue urn:opc:idm:role.<r_name> (par exemple, urn:opc:idm:role.User%20Administrator) lorsque vous devez obtenir un jeton d'accès qui contient les étendues applicables d'un rôle spécifique, à condition que le client et l'utilisateur disposent du rôle spécifique. Par exemple, pour demander un jeton d'accès avec une portée basée sur le rôle de l'administrateur utilisateur et de l'administrateur d'application :
Exemple de demande
curl -i
-H 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8'
--request POST https://<domainURL>/oauth2/v1/token
-d 'grant_type=password&username=<user-name>&password=<example-password>&client_id=<client-id>&client_assertion_type=urn%3Aietf%3Aparams%3Aoauth%3Aclient-assertion-type%3Ajwt-bearer&client_assertion=<client-assertion>&scope=urn:opc:idm:role.User%2520Administrator urn:opc:idm:role.Application%2520Administrator'
Le jeton d'accès généré contiendrait les étendues applicables à l'administrateur de l'utilisateur et à l'administrateur de l'application, à condition que ces rôles soient accordés au client et à l'utilisateur. Par exemple, un client a Role1, Role2 et Role3. Un utilisateur possède Role1, Role2 et le rôle 4. Les portées incluses dans la demande pour le jeton d'accès sont Role1 et Role3. Le jeton d'accès généré ne contient que des étendues pour Role1.
Les revendications de portée peuvent avoir plusieurs portées séparées par des espaces. Si un nom de portée contient un espace, le serveur ne peut pas déterminer la limite de portée correcte. Cela peut se produire lorsqu'un nom de rôle est utilisé dans la portée. Dans l'exemple de demande, les rôles "administrateur utilisateur" et "administrateur d'application" ont des espaces qui ont été encodés par URL : scope=urn:opc:idm:role.User%2520Administrator urn:opc:idm:role.Application%2520Administrator.
Pour éviter les problèmes d'espace dans les noms de rôle, vous devez encoder les noms de rôle deux fois à l'aide de l'encodage d'URL :
Exemple de code Java
String scope = "scope=urn:opc:idm:role." + URLEncoder.encode(URLEncoder.encode("User Administrator", "UTF-8"), "UTF-8");
scope = scope + " urn:opc:idm:role." + URLEncoder.encode(URLEncoder.encode("Application Administrator", "UTF-8"), "UTF-8");
Aucune étendue définie pour une application
/oauth2/v1/authorize :scope=openid: Le jeton d'accès résultant peut être utilisé avec/oauth2/c1/userinfo, qui fournit le minimum d'informations sur l'utilisateur.scope=openid approles groups: Le jeton d'accès résultant peut être utilisé avec/oauth2/v1/userinfopour obtenir les rôles et les groupes de l'utilisateur.
Utiliser des portées de confiance
Les portées de confiance définissent comment un client OAuth accède aux ressources. Les portées de confiance permettent à une application client sécurisée ou confidentielle d'acquérir un jeton d'accès qui donne accès à l'une des ressources d'un domaine d'identité (Account), à d'autres ressources basées sur des marqueurs définis (Tags) ou uniquement aux services pour lesquels il existe une association explicite entre le client et le service (Explicit).
L'option de définition du paramètre
trustScope n'est disponible que pour les applications clients sécurisées et confidentielles. L'option n'est pas disponible pour les applications client publiques.The
trustScope attributes of Account, Tags, and Explicit are named All (for Account), Tagged (for Tags), and Specific (for Explicit) in the identity domain Console.-
Utilisez uniquement la portée
urn:opc:resource:consumer::alldans la demande. Une erreur de portée non valide est retournée si vous tentez d'inclure à la fois la portéeurn:opc:resource:consumer::allet une autre portée dans la même demande, par exempleurn:opc:idm:__myscopes__. -
La demande d'un jeton d'accès à l'aide de l'étendue
urn:opc:resource:consumer::allne retourne pas de jeton d'accès qui fournit l'accès aux API d'administration des domaines d'identité. Vous devez continuer d'utiliser la portée :urn:opc:idm:__myscopes__pour accéder aux API d'administration. Voir Portées. -
La portée demandée par l'application Client doit toujours exister et correspondre, directement ou hiérarchiquement, aux portées autorisées du client pour permettre l'accès du client à la ressource.
-
La valeur
trustScopedeExplicitest affectée par défaut aux applications client sécurisées et confidentielles et permet à votre application client d'acquérir un jeton d'accès avec des autorisations basées sur une association explicite entre le client et les services cibles. Pour utiliser l'optionAllouTagged, vous devez mettre à jour l'application client avec la valeurtrustScopedeAllouTags. - Pour les demandes de jeton de propagation d'identité utilisant l'étendue
urn:opc:resource:consumer::all, le jeton d'accès résultant n'inclut pas l'étendueurn:opc:resource:consumer::all.
Les liens suivants fournissent plus d'informations sur chaque trustScope disponible :
Utilisation de la portée Trust Scope du compte
L'étendue de confiance Account permet à une application client sécurisée ou confidentielle d'obtenir un jeton d'accès qui donne accès à l'un des services qui se trouvent dans le même domaine d'identité sans nécessiter d'association explicite avec les services cibles.
L'option de définition du paramètre
trustScope n'est disponible que pour les applications clients sécurisées et confidentielles. L'option n'est pas disponible pour les applications client publiques.Pour utiliser l'étendue de confiance Account :
-
Affectez la valeur de
Accountau paramètretrustScopepour l'application client approuvée appropriée.Note
L'attributtrustScopedeAccountest nommé Tout dans la console du domaine d'identité.
-
Demandez un jeton d'accès à l'aide du client approuvé ou confidentiel et demandez la portée
urn:opc:resource:consumer::all.Le jeton d'accès dans la réponse contient le publicurn:opc:resource:scope:accountet la portéeurn:opc:resource:consumer::all, ce qui permet d'accéder à tous les services du même domaine sans nécessiter d'association explicite avec les services cibles.
La portée demandée doit toujours exister et correspondre, directement ou hiérarchiquement, aux portées autorisées du client pour permettre l'accès du client à la ressource.
Utiliser des portées de niveau fin
urn:opc:resource:consumer::all, vous pouvez spécifier les portées détaillées suivantes :urn:opc:resource:consumer:paas::readurn:opc:resource:consumer:paas:stack::allurn:opc:resource:consumer:paas:analytics::read
urn:opc:resource:consumer:paas:analytics::read dans sa demande d'accès à une ressource. Si la portée correspond directement à une portée autorisée définie, dans le jeton d'accès retourné, le public est urn:opc:resource:scope:account et la portée est urn:opc:resource:consumer:paas:analytics::read.Si la portée autorisée définie par le client est urn:opc:resource:consumer:paas::read, l'application client est autorisée à accéder à la ressource de manière hiérarchique si le client demande l'une des portées suivantes : urn:opc:resource:consumer:paas::read ou urn:opc:resource:consumer:paas:analytics::read. Toutefois, si la portée demandée est urn:opc:resource:consumer:paas:analytics::write,, le client n'est pas autorisé à accéder à la ressource, car il ne s'agit pas de l'une des portées autorisées définies par l'application client.
Exemples de demande et de réponse
Les exemples suivants présentent des exemples de demande et de réponse pour les données d'identification de client et les flux d'octroi de responsable de ressource.
Exemple de demande de flux de données d'identification de client
curl -i
-H 'Authorization: Basic TXlUZXN0U2VydmljZV9BUFBJRDoxMGE2ODAwMC03YTYzLTQxNDItODE0Ny03MGNmMGJhMDFkYjg='
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://<domainURL>/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=urn:opc:resource:consumer::all' -k
Exemple de réponse
{
"access_token":"eyJ4NX....Zh3ieBlQ",
"token_type":"Bearer",
"expires_in":3600
}
Le jeton d'accès contient l'audience
urn:opc:resource:scope:account et l'étendue urn:opc:resource:consumer::all.Exemple de demande de flux de responsable de ressource
curl -i
-H 'Authorization: Basic TXlUZXN0U2VydmljZV9BUFBJRDoxMGE2ODAwMC03YTYzLTQxNDItODE0Ny03MGNmMGJhMDFkYjg='
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST https://<domainURL>/oauth2/v1/token'
-d 'grant_type=password&scope=urn:opc:resource:consumer::all&username=admin@example.com&password=PasswordExample1'-k
Exemple de réponse
{
"access_token":"eyJ4NX...71aImeBsU",
"token_type":"Bearer",
"expires_in":3600
}
Exemples de demande et de réponse utilisant une portée entièrement qualifiée
Les exemples suivants montrent des exemples de demande et de réponse utilisant une portée entièrement qualifiée.
Exemple de demande
curl -i
-H 'Authorization: Basic TXlUZXN0U2VydmljZV9BUFBJRDoxMGE2ODAwMC03YTYzLTQxNDItODE0Ny03MGNmMGJhMDFkYjg='
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://<domainURL>/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=http://abccorp1.com/scope1'
Exemple de réponse
{
"access_token":"eyJ4NXzF.....rT5SH7sUw",
"token_type":"Bearer",
"expires_in":3600
}
Exemple de demande de flux de responsable de ressource incluant la demande pour un jeton d'actualisation
Pour générer un jeton d'actualisation en plus du jeton d'accès, utilisez la portée urn:opc:resource:consumer::all offline_access dans la demande.
curl -i
-H 'Authorization: Basic TXlUZXN0U2VydmljZV9BUFBJRDoxMGE2ODAwMC03YTYzLTQxNDItODE0Ny03MGNmMGJhMDFkYjg='
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST https://<domainURL>/oauth2/v1/token'
-d 'grant_type=password&scope=urn:opc:resource:consumer::all offline_access&username=admin@example.com&password=PasswordExample1'-k
Exemple de réponse
{
"access_token":"eyJ4...pNYM0M",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"AQIDBAUi....djF9NCA="
}
Utilisation de l'étendue de confiance des marqueurs
L'étendue de confiance Tags permet à une application client sécurisée ou confidentielle d'obtenir un jeton d'accès qui donne accès à d'autres ressources en fonction des marqueurs définis.
L'option de définition du paramètre
trustScope n'est disponible que pour les applications clients sécurisées et confidentielles. L'option n'est pas disponible pour les applications client publiques.Pour utiliser l'étendue de confiance Tags :
-
Affectez la valeur de
Tagsau paramètretrustScopepour permettre à l'application client d'accéder aux marqueurs d'autres applications.Note
L'attributtrustScopedeTagsest nommé Marqué dans la console du domaine d'identité. -
Définissez la paire
key:valuepour le paramètreAllowedTags.Note
Ces étapes supposent que l'application de ressource appropriée a défini des paireskey:valuepour l'attributTagset qu'au moins une pairekey:valuede la liste de l'attributallowedTagsde l'application client correspond à une pairekey:valuede l'attributTagsde l'application de ressource.
-
Demandez un jeton d'accès à l'aide du client approuvé ou confidentiel et demandez la portée
urn:opc:resource:consumer::all.Le jeton d'accès dans la réponse contient le publicurn:opc:resource:scope:tag=<base64 encoded JSON>et la portéeurn:opc:resource:consumer::all, ce qui donne accès aux applications de ressources dont les marqueurs correspondent aux marqueurs autorisés spécifiés dans l'application client.
La portée demandée doit toujours exister et correspondre, directement ou hiérarchiquement, aux portées autorisées du client pour permettre l'accès du client à la ressource.
Utiliser des portées de niveau fin
urn:opc:resource:consumer::all, vous pouvez spécifier les portées détaillées suivantes :urn:opc:resource:consumer:paas::readurn:opc:resource:consumer:paas:stack::allurn:opc:resource:consumer:paas:analytics::read
urn:opc:resource:consumer:paas:analytics::read dans sa demande d'accès à une ressource. Si la portée correspond directement à une portée autorisée définie, le public est urn:opc:resource:scope:tag=<base64 encoded JSON> dans le jeton d'accès retourné et la portée est urn:opc:resource:consumer:paas:analytics::read.Si la portée autorisée définie par le client est urn:opc:resource:consumer:paas::read, l'application client est autorisée à accéder à la ressource de manière hiérarchique si le client demande l'une des portées suivantes : urn:opc:resource:consumer:paas::read ou urn:opc:resource:consumer:paas:analytics::read. Toutefois, si la portée demandée est urn:opc:resource:consumer:paas:analytics::write,, le client n'est pas autorisé à accéder à la ressource, car il ne s'agit pas de l'une des portées autorisées définies par l'application client.
Exemples de demande et de réponse
Les exemples suivants présentent des exemples de demande et de réponse pour le flux de données d'identification de client à l'aide de l'étendue urn:opc:resource:consumer::all.
Exemple de demande
curl -i
-H 'Authorization: Basic MjA3Mz....zllNjI2'
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://tenant101.idcs.internal.oracle.com:8943/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=urn:opc:resource:consumer::all'
Exemple de réponse
{
"access_token""eyJ4NX....ZbDtAw",
"token_type":"Bearer", "expires_in":3600
}
Le jeton d'accès contient l'audience
urn:opc:resource:scope:tag=<base64 encoded JSON> et l'étendue urn:opc:resource:consumer::all. Voici un exemple d'audience décodée : aud:["urn:opc:resource:scope:tag=eyAidGFncyI6WyB7ICJrZXkiOiJjb2xvciIsInZhbHVlIjoiZ3JlZW4ifSAsICB7ICJrZXkiOiJjb2xvciIsInZhbHVlIjoiYmx1ZSJ9IF19"]Les exemples suivants présentent des exemples de demande et de réponse pour le flux de données d'identification du client à l'aide d'une portée entièrement qualifiée.
Exemple de demande
curl -i
-H 'Authorization: Basic MzRjYz....Q3OWVk'
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://<domainURL>/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=http://abccorp1.com/scope1'
Exemple de réponse
{
"access_token""eyJ4NXzF.....rT5SH7sUw",
"token_type":"Bearer",
"expires_in":3600
}
Utiliser l'étendue de confiance explicite
L'étendue de confiance Explicit définit l'étendue de confiance uniquement pour les services pour lesquels il existe une association explicite entre le client et le service cible.
L'option de définition du paramètre
trustScope n'est disponible que pour les applications clients sécurisées et confidentielles. L'option n'est pas disponible pour les applications client publiques.Vous n'avez rien à faire pour utiliser l'étendue de confiance Explicit, car il s'agit de la valeur par défaut affectée à l'application client sécurisée et confidentielle. Pour utiliser l'option Account ou Tags, vous devez mettre à jour l'application client avec la valeur trustScope Account ou Tags.
L'attribut
trustScope de Explicit est nommé Spécifique dans le domaine d'identité.Voir Utilisation de l'étendue de confiance du compte et Utilisation de l'étendue de confiance des marqueurs.
Exemples de demande et de réponse
Les exemples de demande et de réponse montrent le flux de données d'identification du client à l'aide d'une portée entièrement qualifiée.
Exemple de demande
curl -i
-H 'Authorization: Basic MzRjYz....Q3OWVk'
-H 'Content-Type: application/x-www-form-urlencoded; charset=utf-8'
--request POST 'https://<domainURL>/oauth2/v1/token'
-d 'grant_type=client_credentials&scope=http://abccorp1.com/scope1'
Exemple de réponse
{
"access_token""eyJ4NXzF.....rT5SH7sUw",
"token_type":"Bearer",
"expires_in":3600
}
Utiliser les portées de confiance explicites de plusieurs ressources
L'étendue de confiance Explicit définit l'étendue de confiance uniquement pour les services pour lesquels il existe une association explicite entre le client et le service cible. Vous pouvez spécifier plusieurs étendues appartenant à différentes ressources dans une seule demande d'autorisation ou de jeton et obtenir plusieurs jetons d'accès en retour avec chacun d'eux contenant les étendues pour chaque ressource.
- Vous devez spécifier la portée nouvellement définie,
urn:opc:resource:multiresourcescope, dans la demande d'autorisation ou la demande de jeton. Les demandes de jeton échoueront si plusieurs portées appartenant à différentes ressources sont spécifiées sans cette portée. - Le client OAuth doit pouvoir analyser la réponse du jeton qui inclut plusieurs jetons d'accès et utiliser chaque jeton pour accéder à chaque service de ressources.
Vous pouvez utiliser cette fonction avec tous les types d'autorisation, à l'exception du flux implicite. Voir Type de droit implicite.
Voir Utilisation de la portée de confiance explicite (spécifique) pour plus d'informations sur les portées de confiance explicites.
Exemples de demande et de réponse
Les exemples de demande et de réponse montrent le flux de données d'identification du client à l'aide d'une portée entièrement qualifiée.
Exemple de demande
https://<domainURL>/oauth2/v1/authorize?
client_id=<client-id>&
response_type=code&
redirect_uri=<redirect-url>&
scope=http://abccorp.com/scope1 http://123corp.com/scope1 openid urn:opc:resource:multiresourcescope
curl -i
-H 'Authorization: Basic MzgzZTU4Z….NTM3YjFm' \
--request POST 'https://<domainURL>/oauth2/v1/token' \
-d 'grant_type=authorization_code' \
-d 'code=AgAgYjc1MzgzNWM2NGQxNDA5…YcxU_XdtfLWXUp1Vn4a5uIHiOn4='
curl -i
-H 'Authorization: Basic MzgzZTU4Z….NTM3YjFm' \
--request POST 'https://<domainURL>/oauth2/v1/token' \
-d 'grant_type=client_credentials' \
-d 'scope=http://abccorp.com/scope1 http://123corp.com/scope1 urn:opc:resource:multiresourcescope
Exemple de réponse
{
"tokenResponses":[
{
"access_token": "eyJ4NXQjUzI1NiI6InZBV3RzNEo1clE1Z.....1iZDc2NjFjMWJiZjA0OGNhOTkyMWNlN2Q4MThkNDY0YSIsImp0aSI6Ijg53ZFOT2FxyZYjocCnm1b1w",
"token_type": "Bearer",
"expires_in": 3600
},
{
"access_token": "eyJ4NXQjUzI1NiI6InZBV3RzNEo1clE1Z.....HplcmtUNjdsU19SjZlYjc5ZDgzMTVhYjQ0ODBiNDlkMjU3NzdkZWMzMDE2In0.k4QShMbO5aPGmYyKo",
"token_type": "Bearer",
"expires_in": 3000
}
],
"id_token": "eyJ4NXQjUzI1NiI6InZBV3RzNEo1clE1ZHplc.....mtUNjdsU19SYjhQTWoYDSVhTUmDl8zK3a9vk7cowIW2hr3smwtcsvfsbrewwtbnCrGerp7v4CUcVYlSw"
}