ámbitos
Mediante el parámetro de ámbito, el token de acceso puede otorgar diferentes niveles de acceso a varias API de dominio de identidad de IAM.
Los ámbitos proporcionan una manera de definir un juego de recursos y operaciones de una forma más específica que permite un token de acceso. Los ámbitos representan la intención. Cuando un cliente solicita un símbolo de acceso, los ámbitos requeridos indican el tipo de funcionalidad de la que desea utilizar al presentar el símbolo de acceso.
Además, diferentes tipos de aplicaciones utilizan diferentes permisos de token de acceso. Las aplicaciones de confianza (como los servicios de backend) pueden solicitar tokens de acceso directamente en nombre de los usuarios. Las aplicaciones web suelen tener que validar primero la identidad del usuario y, opcionalmente, obtener el consentimiento del usuario.
Utilice el ámbito urn:opc:idm:__myscopes__ cuando necesite obtener un token del acceso que contenga todos los ámbitos de dominio de identidad permitidos. Se devuelven tokens de acceso que contienen todos los ámbitos de dominio de identidad aplicables en función de los privilegios representados por los roles de aplicación de dominio de identidad otorgados al cliente solicitante y al usuario que está especificando la solicitud del cliente (si existe). Este ámbito no se otorga directamente a ningún rol de administrador de dominio de identidad.
Utilice el ámbito urn:opc:idm:role.<r_name> (por ejemplo, urn:opc:idm:role.User%20Administrator) cuando necesite obtener un token de acceso que contenga los ámbitos aplicables de un rol específico, siempre que tanto el cliente como el usuario tengan otorgado el rol específico. Por ejemplo, para solicitar un token de acceso con un ámbito basado en roles de administrador de usuarios y administrador de aplicaciones:
Ejemplo de solicitud
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'
El token de acceso generado contendría los ámbitos aplicables para el administrador de usuarios y el administrador de aplicaciones siempre que se otorguen estos roles tanto al cliente como al usuario. Por ejemplo, un cliente tiene Role1, Role2 y Role3. Un usuario tiene Role1, Role2 y el rol 4. Los ámbitos incluidos en la solicitud para el token de acceso son Role1 y Role3. El token de acceso generado contendría solo ámbitos para Role1.
Las reclamaciones de ámbito pueden tener varios ámbitos separados por espacios. Si un nombre de ámbito contiene un espacio, el servidor no puede determinar el límite de ámbito correcto. Esto puede ocurrir cuando se utiliza un nombre de rol en el ámbito. En el ejemplo de solicitud, los roles "administrador de usuario" y "administrador de aplicación" tienen espacios codificados en URL: scope=urn:opc:idm:role.User%2520Administrator urn:opc:idm:role.Application%2520Administrator.
Para evitar problemas de espacio en los nombres de rol, debe codificar los nombres de rol dos veces mediante la codificación de URL:
Ejemplo de código 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");
No se han definido ámbitos para una aplicación
/oauth2/v1/authorize:scope=openid: el token de acceso resultante se puede utilizar con/oauth2/c1/userinfo, que proporciona la información de usuario mínima.scope=openid approles groups: el token de acceso resultante se puede utilizar con/oauth2/v1/userinfopara obtener los roles y grupos del usuario.
Uso de ámbitos de confianza
Los ámbitos de confianza definen cómo un cliente OAuth accede a los recursos. Los ámbitos de confianza permiten que una aplicación cliente de confianza o confidencial adquiera un token de acceso que proporcione acceso a cualquiera de los recursos de un dominio de identidad (Account), a otros recursos basados en etiquetas definidas (Tags) o solo a aquellos servicios en los que exista una asociación explícita entre el cliente y el servicio (Explicit).
La opción para definir el parámetro
trustScope solo está disponible para aplicaciones cliente confidenciales y de confianza. La opción no está disponible para las aplicaciones de cliente públicas.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.-
Utilice solo el ámbito
urn:opc:resource:consumer::allen la solicitud. Se devolverá un error de ámbito no válido si intenta incluir tanto el ámbitourn:opc:resource:consumer::allcomo otro ámbito en la misma solicitud, comourn:opc:idm:__myscopes__. -
Al solicitar un token de acceso mediante el ámbito
urn:opc:resource:consumer::all, no se devuelve un token de acceso que proporcione acceso a las API de administración de los dominios de identidad. Debe seguir utilizando el ámbito:urn:opc:idm:__myscopes__para acceder a las API de administrador. Consulte Scopes. -
El ámbito pedido por la aplicación cliente siempre debería existir y coincidir, directa o jerárquicamente, con los ámbitos permitidos definidos del cliente para permitir el acceso del cliente al recurso.
-
El valor
trustScopedeExplicitse asigna por defecto a aplicaciones cliente confidenciales y de confianza y permite a la aplicación cliente adquirir un token de acceso con permisos basados en una asociación explícita entre los servicios de cliente y destino. Para utilizar la opciónAlloTagged, debe actualizar la aplicación cliente con el valortrustScopedeAlloTags. - Para las solicitudes de token de propagación de identidad que utilizan el ámbito
urn:opc:resource:consumer::all, el token de acceso resultante no incluye el ámbitourn:opc:resource:consumer::all.
Los siguientes enlaces proporcionan más información sobre cada trustScope disponible:
Uso del ámbito de confianza de la cuenta
El ámbito de confianza Account permite a una aplicación cliente de confianza o confidencial obtener un token de acceso que proporciona acceso a cualquiera de los servicios que están en el mismo dominio de identidad sin necesidad de una asociación explícita con los servicios de destino.
La opción para definir el parámetro
trustScope solo está disponible para aplicaciones cliente confidenciales y de confianza. La opción no está disponible para las aplicaciones de cliente públicas.Para utilizar el ámbito de confianza Account:
-
Asigne el valor de
Accountal parámetrotrustScopepara la aplicación cliente de confianza adecuada.Nota
El atributotrustScopedeAccountse denomina Todo en la consola del dominio de identidad.
-
Solicite un token de acceso mediante el cliente confidencial o de confianza y solicite el ámbito
urn:opc:resource:consumer::all.The access token in the response contains the audienceurn:opc:resource:scope:accountand the scopeurn:opc:resource:consumer::all, which gives access to any of the services that are in the same domain without requiring explicit association with the target services.
El ámbito solicitado siempre debe existir y coincidir, directa o jerárquicamente, con los ámbitos permitidos definidos del cliente para permitir el acceso del cliente al recurso.
Uso de Ámbitos Detallados
urn:opc:resource:consumer::all, también puede especificar los siguientes ámbitos detallados: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 en su solicitud para acceder a un recurso. Si el ámbito coincide directamente con un ámbito permitido definido, en el token del acceso devuelto el público es urn:opc:resource:scope:account y el ámbito es urn:opc:resource:consumer:paas:analytics::read.Si el ámbito permitido definido por el cliente es urn:opc:resource:consumer:paas::read, la aplicación cliente puede acceder al recurso jerárquicamente si el cliente solicita uno de los siguientes ámbitos: urn:opc:resource:consumer:paas::read o urn:opc:resource:consumer:paas:analytics::read. Sin embargo, si el ámbito solicitado es urn:opc:resource:consumer:paas:analytics::write,, el cliente no tiene permiso para acceder al recurso, ya que no es uno de los ámbitos permitidos definidos por la aplicación cliente.
Ejemplos de Solicitudes y Respuestas
Los siguientes ejemplos muestran ejemplos de solicitud y respuesta para las credenciales de cliente y los flujos de otorgamiento de propietario de recurso.
Ejemplo de solicitud de flujo de credenciales de cliente
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
Ejemplo de respuesta
{
"access_token":"eyJ4NX....Zh3ieBlQ",
"token_type":"Bearer",
"expires_in":3600
}
El token de acceso contiene el público
urn:opc:resource:scope:account y el ámbito urn:opc:resource:consumer::all.Ejemplo de solicitud de flujo de propietario de recurso
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
Ejemplo de respuesta
{
"access_token":"eyJ4NX...71aImeBsU",
"token_type":"Bearer",
"expires_in":3600
}
Ejemplos de solicitud y respuesta mediante un ámbito totalmente cualificado
Los siguientes ejemplos muestran ejemplos de solicitud y respuesta que utilizan un ámbito totalmente cualificado.
Ejemplo de solicitud
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'
Ejemplo de respuesta
{
"access_token":"eyJ4NXzF.....rT5SH7sUw",
"token_type":"Bearer",
"expires_in":3600
}
Ejemplo de solicitud de flujo de propietario de recurso que incluye la solicitud de un token de refrescamiento
Para generar un token de refrescamiento además del token de acceso, utilice el ámbito urn:opc:resource:consumer::all offline_access en la solicitud.
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
Ejemplo de respuesta
{
"access_token":"eyJ4...pNYM0M",
"token_type":"Bearer",
"expires_in":3600,
"refresh_token":"AQIDBAUi....djF9NCA="
}
Uso del ámbito de confianza de etiquetas
El ámbito de confianza Tags permite a una aplicación cliente de confianza o confidencial obtener un token de acceso que proporciona acceso a otros recursos en función de las etiquetas definidas.
La opción para definir el parámetro
trustScope solo está disponible para aplicaciones cliente confidenciales y de confianza. La opción no está disponible para las aplicaciones de cliente públicas.Para utilizar el ámbito de confianza Tags:
-
Asigne el valor de
Tagsal parámetrotrustScopepara permitir que la aplicación cliente acceda a etiquetas desde otras aplicaciones.Nota
El atributotrustScopedeTagsse denomina Etiquetado en la consola del dominio de identidad. -
Defina el par
key:valuepara el parámetroAllowedTags.Nota
En estos pasos se supone que la aplicación de recursos adecuada ha definido pareskey:valuepara el atributoTagsy que al menos un parkey:valuede la lista del atributoallowedTagsde la aplicación cliente coincide con un parkey:valuedel atributoTagsde la aplicación de recursos.
-
Solicite un token de acceso mediante el cliente confidencial o de confianza y solicite el ámbito
urn:opc:resource:consumer::all.El token de acceso de la respuesta contiene el destinatariourn:opc:resource:scope:tag=<base64 encoded JSON>y el ámbitourn:opc:resource:consumer::all, que proporciona acceso a las aplicaciones de recursos que tienen etiquetas que coinciden con las etiquetas permitidas especificadas en la aplicación cliente.
El ámbito solicitado siempre debe existir y coincidir, directa o jerárquicamente, con los ámbitos permitidos definidos del cliente para permitir el acceso del cliente al recurso.
Uso de Ámbitos Detallados
urn:opc:resource:consumer::all, también puede especificar los siguientes ámbitos detallados: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 en su solicitud para acceder a un recurso. Si el ámbito coincide directamente con un ámbito permitido definido, en el token a acceder devuelto el público es urn:opc:resource:scope:tag=<base64 encoded JSON> y el ámbito es urn:opc:resource:consumer:paas:analytics::read.Si el ámbito permitido definido por el cliente es urn:opc:resource:consumer:paas::read, la aplicación cliente puede acceder al recurso jerárquicamente si el cliente solicita uno de los siguientes ámbitos: urn:opc:resource:consumer:paas::read o urn:opc:resource:consumer:paas:analytics::read. Sin embargo, si el ámbito solicitado es urn:opc:resource:consumer:paas:analytics::write,, el cliente no tiene permiso para acceder al recurso, ya que no es uno de los ámbitos permitidos definidos por la aplicación cliente.
Ejemplos de Solicitudes y Respuestas
Los siguientes ejemplos muestran ejemplos de solicitud y respuesta para el flujo de credenciales de cliente mediante el ámbito urn:opc:resource:consumer::all.
Ejemplo de solicitud
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'
Ejemplo de respuesta
{
"access_token""eyJ4NX....ZbDtAw",
"token_type":"Bearer", "expires_in":3600
}
El token de acceso contiene el público
urn:opc:resource:scope:tag=<base64 encoded JSON> y el ámbito urn:opc:resource:consumer::all. A continuación se muestra un ejemplo de un público descodificado: aud:["urn:opc:resource:scope:tag=eyAidGFncyI6WyB7ICJrZXkiOiJjb2xvciIsInZhbHVlIjoiZ3JlZW4ifSAsICB7ICJrZXkiOiJjb2xvciIsInZhbHVlIjoiYmx1ZSJ9IF19"]Los siguientes ejemplos muestran ejemplos de solicitud y respuesta para el flujo de credenciales de cliente mediante un ámbito totalmente cualificado.
Ejemplo de solicitud
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'
Ejemplo de respuesta
{
"access_token""eyJ4NXzF.....rT5SH7sUw",
"token_type":"Bearer",
"expires_in":3600
}
Uso del ámbito de confianza explícita
El ámbito de confianza Explicit define el ámbito de confianza solo para aquellos servicios en los que existe una asociación explícita entre el cliente y el servicio de destino.
La opción para definir el parámetro
trustScope solo está disponible para aplicaciones cliente confidenciales y de confianza. La opción no está disponible para las aplicaciones de cliente públicas.No tiene que hacer nada para utilizar el ámbito de confianza Explicit porque es el valor por defecto asignado a la aplicación cliente de confianza y confidencial. Para utilizar la opción Account o Tags, debe actualizar la aplicación cliente con el valor trustScope de Account o Tags.
El atributo
trustScope de Explicit se denomina Específico en el dominio de identidad.Consulte Uso del ámbito de confianza de la cuenta y Uso del ámbito de confianza de etiquetas.
Ejemplos de Solicitudes y Respuestas
Los ejemplos de solicitud y respuesta muestran el flujo de credenciales del cliente mediante un ámbito totalmente cualificado.
Ejemplo de solicitud
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'
Ejemplo de respuesta
{
"access_token""eyJ4NXzF.....rT5SH7sUw",
"token_type":"Bearer",
"expires_in":3600
}
Uso de Ámbitos de Confianza Explícitos de Varios Recursos
El ámbito de confianza Explicit define el ámbito de confianza solo para aquellos servicios en los que existe una asociación explícita entre el cliente y el servicio de destino. Puede especificar varios ámbitos que pertenezcan a diferentes recursos en una única solicitud de autorización o solicitud de token y obtener varios tokens de acceso a cambio de que cada uno de ellos contenga los ámbitos de cada recurso.
- Debe especificar el ámbito recién definido,
urn:opc:resource:multiresourcescope, en la solicitud de autorización o en la solicitud de token. Las solicitudes de token fallarán si se especifican varios ámbitos que pertenecen a diferentes recursos sin este ámbito. - El cliente OAuth debe poder analizar la respuesta del token que incluye varios tokens de acceso y utilizar cada token para acceder a cada servicio de recursos.
Puede utilizar esta función con todos los tipos de permiso, excepto el flujo implícito. Consulte Tipo de permiso implícito.
Consulte Uso del ámbito de confianza explícito (específico) para obtener más información sobre los ámbitos de confianza explícitos.
Ejemplos de Solicitudes y Respuestas
Los ejemplos de solicitud y respuesta muestran el flujo de credenciales del cliente mediante un ámbito totalmente cualificado.
Ejemplo de solicitud
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
Ejemplo de respuesta
{
"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"
}