Uso de OpenID Connect para ampliar OAuth 2.0
OpenID Connect amplía el protocolo OAuth 2.0 para agregar una capa de identidad y autenticación simple que se encuentra sobre OAuth 2.0.
Utilice OpenID Connect cuando desee que sus aplicaciones basadas en la nube obtengan información de identidad, recuperen detalles sobre el evento de autenticación (como cuándo, dónde y cómo se produjo la autenticación) y permitan la conexión única federada (SSO).
OAuth 2.0 proporciona tokens de seguridad para su uso al llamar a recursos de backend en nombre de un usuario. OAuth proporciona una concesión o licencia de la capacidad de acceder a recursos en lugar de proporcionar información sobre la autenticación en sí. El uso de OAuth para la autenticación es como un administrador de apartamentos que le da a alguien que quiere conocer su identidad una clave temporal para su apartamento. La clave solo implica el derecho a entrar en el apartamento durante un período de tiempo específico. No implica que el individuo sea el propietario.
Con OpenID Connect se completa la imagen proporcionando a las aplicaciones información sobre el usuario, el contexto de su autenticación y el acceso a la información de su perfil. OpenID Connect permite a los clientes de todo tipo, incluidos los clientes basados en web, móviles y JavaScript, solicitar y recibir información sobre las sesiones autenticadas y los usuarios finales. Consulte OpenID Connect para obtener más información.
Token de ID de conexión OpenID: este token contiene información sobre la sesión autenticada del usuario.
Punto final UserInfo: este punto final proporciona una forma para que el cliente recupere atributos adicionales sobre el usuario.
Implementación de OpenID Connect
Hay tres acciones principales necesarias para implantar OpenID Connect:
-
Obtener un token de ID de conexión OpenID: utilice un tipo de permiso OAuth2 para solicitar un token de ID de conexión OpenID mediante la inclusión del ámbito
openiden la solicitud de autorización.Los siguientes casos de uso proporcionan solicitudes y respuestas de ejemplo para obtener el token de ID.
-
Valide el token de ID: valide el token de ID para asegurarse de que se originó a partir de un emisor de confianza y de que el contenido no se alteró durante el tránsito.
El siguiente caso de uso proporciona información sobre cómo y qué validar.
-
Recuperar información de perfil del punto final
UserInfo: mediante el token de acceso OAuth2, acceda al punto finalUserInfopara recuperar información de perfil sobre el usuario autenticado.En el siguiente caso de uso se proporcionan solicitudes y respuestas de ejemplo para recuperar información de perfil del punto final
UserInfo.
Token de identidad
Un token de identidad es un token protegido por integridad y autónomo (en formato de token web JSON (JWT) que se define en el estándar OpenID Connect que contiene reclamaciones sobre el usuario final. El token de identidad es la extensión principal que OpenID Connect realiza en OAuth 2.0 para activar la autenticación en un dominio de identidad.
El JWT de token de identidad consta de tres componentes, una cabecera, una carga útil y la firma digital. Siguiendo el estándar JWT, estas tres secciones están codificadas y separadas por puntos en Base64URL.
Las solicitudes de Connect de OpenID deben contener el valor de ámbito
openid. OpenID Connect 1.0 es una capa de identidad simple sobre el protocolo OAuth 2.0. Permite a una aplicación cliente de dominio de identidad de IAM (registrada como cliente OAuth 2 con ID de cliente y secreto de cliente) verificar la identidad del usuario final en función de la autenticación realizada por un servidor de autorización (AS) y obtener información de perfil básica sobre el usuario final de una manera interoperable y similar a REST. OpenID Connect permite a los clientes de todo tipo, incluidos los clientes basados en web, móviles y JavaScript, solicitar y recibir información sobre las sesiones autenticadas y los usuarios finales. Consulte OpenID Connect para obtener más información.
| Nombre | Valor |
|---|---|
amr
|
Referencias de métodos de autenticación. Matriz JSON de cadenas que son identificadores de los métodos de autenticación utilizados en la autenticación. Por ejemplo, los valores pueden indicar que se han utilizado métodos de autenticación OTP y contraseña. |
at_hash
|
OAuth 2 Valor hash de token de acceso. |
aud
|
Identifica los destinatarios para los que está destinado este token de ID. Debe ser OAuth 2.0 client_id (según la especificación de OpenID Connect). Éste es el nombre de cliente OAuth (app.name) que está realizando la solicitud. Aud también contiene el emisor del dominio de identidad de IAM, con lo que se convierte el tipo de token (IT) en una afirmación de usuario del dominio de identidad de IAM. |
authn_strength*
|
Valor devuelto por el inicio de sesión único en la nube que indica la solidez de autenticación del contexto AuthN. |
auth_time
|
Tiempo (tiempo de época UNIX) en el que el inicio de sesión único en la nube autenticó realmente al usuario (en segundos, procedente del contexto AuthN). |
azp
|
Parte autorizada. Parte a la que se emitió el token de ID. Si está presente, DEBE contener el ID de cliente OAuth 2.0 de esta parte. Esta reclamación solo es necesaria cuando el token de ID tiene un valor de público único y ese público es diferente de la parte autorizada. Puede ser incluido incluso cuando la parte autorizada es la misma que la única audiencia. El valor azp es una cadena sensible a mayúsculas/minúsculas que contiene un valor StringOrURI. |
exp
|
Tiempo de caducidad (tiempo de época UNIX) en el que no se debe aceptar el token de ID para su procesamiento o después de este. Este valor debe ser igual que session_exp. |
iat
|
Tiempo (tiempo de época UNIX) en que se creó el JWT (en segundos). El tiempo de época de UNIX es un número JSON que representa el número de segundos desde 1970-01-01T0:0:0Z medido en el tiempo universal coordinado (UTC) hasta la fecha/hora. |
iss
|
El principal que emitió el token: https://<domainURL>
|
jti
|
Identificador único generado por el servidor para el ID de JWT. |
nonce
|
Valor de cadena utilizado para asociar una sesión de cliente a un token de ID y para mitigar los ataques de reproducción. Este valor lo proporciona Cloud Gate. |
session_exp*
|
Tiempo (tiempo de época de UNIX) en que caduca la sesión de SSO en la nube (segundos, debe ser la misma caducidad de sesión de SSO en el contexto AuthN). |
sid
|
ID de sesión de SSO en la nube (255 caracteres ASCII como máximo) del contexto AuthN. |
sub
|
Identifica al usuario. El identificador de asunto es localmente único, nunca se reasigna y está destinado a ser consumido por el cliente: ID de conexión de usuario (255 caracteres ASCII como máximo). ID de conexión del usuario del contexto AuthN. |
sub_mappingattr*
|
Atributo utilizado para buscar el sub en el almacén de ID. |
tok_type*
|
Identifica el tipo de token: IT |
user_displayname*
|
Nombre mostrado del usuario (255 caracteres ASCII como máximo) del contexto AuthN. |
user_csr*
|
Indica (true) que el usuario es un representante de servicio al cliente (CSR). |
user_id*
|
GUID de dominio de identidad de IAM del usuario desde el contexto AuthN. |
user_lang*
|
El idioma preferido del usuario. |
user_locale*
|
Configuración regional del usuario. |
user_tenantname*
|
Nombre de inquilino de usuario (255 caracteres ASCII como máximo). El GUID del inquilino no se guarda específicamente en el token |
user_tz*
|
Zona horaria del usuario. |
Validación de token de identidad
¿Por qué validamos tokens? Cuando la aplicación web comprueba las credenciales directamente, verifica que el nombre de usuario y la contraseña que se presentan corresponden con lo que mantiene. Cuando se utiliza la identidad basada en reclamaciones, se subcontrata ese trabajo a un proveedor de identidad.
La responsabilidad pasa de verificar las credenciales raw a verificar que el solicitante haya pasado por su proveedor de identidad preferido y se haya autenticado correctamente. El proveedor de identidad representa una autenticación correcta mediante la emisión de un token. Antes de poder utilizar la información o confiar en ella como afirmación de que el usuario se ha autenticado, debe validarla.
OpenID Documento de Detección
El protocolo OpenID Connect 1.0 es una capa de identidad simple sobre el protocolo OAuth 2.0 que requiere el uso de varios puntos finales para autenticar usuarios y para solicitar recursos que incluyen información de usuario, tokens y claves públicas. Para ayudar a detectar cuáles son los puntos finales que debe utilizar, OpenID Connect le permite utilizar un documento de detección, que es un documento JSON que se encuentra en una ubicación conocida. Este documento de detección contiene pares clave/valor que proporcionan detalles sobre la configuración del proveedor de Connect OpenID, incluidos los URI de los puntos finales de autorización, token, información de usuario y claves públicas. Puede recuperar el documento de detección para el servicio de conexión OpenID del dominio de identidad de IAM desde: https://<domainURL>/.well-known/openid-configuration.
Validación de tokens de identidad
Un token de identidad (ID) es un token protegido por integridad y autónomo (en formato de token web JSON) que contiene reclamaciones sobre el usuario final. Representa la sesión de un usuario autenticado. Por lo tanto, el token se debe validar antes de que una aplicación pueda confiar en el contenido del token de ID. Por ejemplo, si un atacante malicioso reprodujo un token de ID de usuario que había capturado anteriormente, la aplicación debe detectar que el token se ha reproducido o se ha utilizado después de que haya caducado y denegar la autenticación.
-
Compruebe que el valor de la reclamación de público (
aud) contiene el valorclient_idde la aplicación. La reclamaciónaud(audiencia) puede contener una matriz con más de un elemento. El token de ID se debe rechazar si el token de ID no muestra al cliente como un público válido o si contiene públicos adicionales de los que el cliente no confía. -
Verifique que la hora actual sea anterior a la hora representada por la reclamación de la hora de caducidad (
exp). -
Verifique que el emisor haya firmado correctamente el token de ID. Los tokens emitidos del dominio de identidad se firman mediante uno de los certificados encontrados en el URI especificado en el campo
jwks_uridel documento de detección.-
Recupere el certificado público del inquilino desde el punto final
SigningCert/jwk(por ejemplo,https://acme.identity.oraclecloud.com/admin/v1/SigningCert/jwk).Nota
Dado que los dominios de identidad cambian las claves públicas con poca frecuencia, puede almacenar en caché las claves públicas y, en la gran mayoría de los casos, realizar de forma eficaz la validación local. Esto requiere recuperar y analizar certificados y realizar las llamadas criptográficas adecuadas para comprobar la firma: -
Utilice cualquier biblioteca de JWT disponible para validar, por ejemplo, la biblioteca Nimbus JWT de Connect2id para Java. Consulte JWT para obtener una lista de las bibliotecas disponibles.
Nota
En caso de fallo de validación de firma, para evitar recuperaciones constantes en caso de ataques con tokens falsos, la recuperación/realmacenamiento en caché de la clave pública se debe basar en un intervalo de tiempo, como 60 minutos, para que las recuperaciones solo se realicen cada 60 minutos.
Ejemplo
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(); } } } -
-
Verifique que el valor de la reclamación del identificador de emisor (
iss) coincida exactamente con el valor de la reclamacióniss(emisor):https://<domainURL>/
Consulta del punto final UserInfo
Una aplicación utiliza el punto final UserInfo de Connect OpenID para recuperar información de perfil sobre la identidad que se ha autenticado. Las aplicaciones pueden utilizar este punto final para recuperar información de perfil, preferencias y otra información específica del usuario.
El perfil de Connect OpenID consta de dos componentes:
-
Reclamaciones que describen al usuario
-
Punto final
UserInfoque proporciona un mecanismo para recuperar estas reclamacionesNota
Las reclamaciones de usuario también se pueden presentar dentro del token de ID para eliminar una devolución de llamada durante el tiempo de autenticación.
Reclamaciones de perfil de usuario
El punto final UserInfo proporciona un juego de reclamaciones basado en los ámbitos OAuth2 presentados en la solicitud de autenticación. OpenID Connect define cinco valores de ámbito que se asignan a un juego específico de reclamaciones por defecto:
| OpenID Ámbito de conexión | Reclamaciones devueltas |
|---|---|
|
openid |
None (Ninguno): indica que se trata de una solicitud de conexión OpenID |
|
perfil |
Nombre, family_name, given_name, middle_name, apodo, preferred_username, perfil, imagen, sitio web, género, fecha de nacimiento, información de zona, configuración regional, updated_at |
|
dirección |
dirección |
|
correo electrónico |
correo electrónico, email_verified |
|
teléfono |
phone_number, phone_number_verified |
El cliente debe presentar sus credenciales y un token de acceso. El token de acceso presentado debe contener el ámbito openid.
Si se omite un ámbito (por ejemplo, no se utiliza el ámbito email), la reclamación (email) no estará presente en las reclamaciones devueltas.
Ejemplo de solicitud de punto final UserInfo
Después de que la aplicación cliente haya autenticado un usuario y tenga el token de acceso, el cliente puede realizar una solicitud al punto final UserInfo para recuperar los atributos solicitados sobre un usuario. En el siguiente ejemplo se muestra un ejemplo de solicitud.
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
Ejemplo de respuesta
Una respuesta correcta devuelve una respuesta HTTP 200 OK y las reclamaciones del usuario en formato 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":""
}
Antes de que la aplicación cliente pueda confiar en los valores devueltos desde el punto final UserInfo (por ejemplo, como una comprobación del ataque de sustitución de token), el cliente debe verificar que la reclamación sub devuelta desde la solicitud de punto final UserInfo coincide con el asunto del token de ID.
Uso del flujo de código de autorización con OpenID Connect
Utilice el flujo Código de autorización cuando tenga clientes que puedan mantener de forma segura un secreto de cliente entre ellos y el servidor de autorización. El flujo Código de autorización devuelve un código de autorización al cliente, que luego puede intercambiar el código por un token de ID y un token de acceso directamente.
Esto le proporciona la ventaja de no exponer ningún token al agente de usuario (como un explorador web) y posiblemente a otras aplicaciones maliciosas con acceso al agente de usuario. El servidor de autorización también puede autenticar el cliente antes de intercambiar el código de autorización por un token de acceso. El flujo Código de autorización funciona tanto con clientes confidenciales como con clientes públicos.
Clientes confidenciales
Solicite el código de autorización. En esta solicitud, el valor del parámetro de ámbito es
openid.Este es un valor de especificación de Connect OpenID.Ejemplo de solicitud
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openidEjemplo de respuesta
https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA=Puede proporcionar valores de ámbito adicionales en las solicitudes, por ejemplo:
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=phone+openid+offline_access+profile+address+emailEsta solicitud contiene el ámbito de recurso openid y OAuth:
https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=http://<domainURL>/api+openid
Solicite el token. El cliente extrae el parámetro de código de la respuesta y realiza la solicitud de token. Además, el cliente proporciona su ID de cliente y secreto como parte de la cabecera de autenticación básica.
Ejemplo de solicitud
curl -i -H 'Authorization: Basic ZWE1OGIwNDA0N2ZkNGQ4MTgyYThiYWQ0ZTNkMGFmZjU6ZGMxNGE4MjMtZGU2OC00YWNhLTg1OWUtMWNhZTJmNjQ0NTBi' -H 'Accept: */*' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAXv9lZQ???.jF9NCA'Ejemplo de respuesta
La solicitud contiene tanto el token de acceso como el token de ID.
{ "access_token":"eyJ4NXQjUzI1???.xhtnbw", "token_type":"Bearer", "expires_in":27261, "id_token":"eyJ4NXQjUzI1???.._XLqUw" }
Clientes públicos
Los clientes públicos no tienen credenciales, sino que tienen un identificador de cliente. Hay dos pasos en el flujo Código de autorización. Las solicitudes implican una solicitud GET basada en explorador y, a continuación, una solicitud POST de canal secundario para obtener el token de acceso.
-
Solicite el código de autorización.
Ejemplo de solicitud
GET https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid&nonce=<nonce-value>&state=1234Ejemplo de respuesta
Nota
Estos ejemplos de solicitud y respuesta son similares a las solicitudes y respuestas del Cliente Confidencial que se han tratado anteriormente.https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA= -
Solicitar el token.
Ejemplo de solicitud
Nota
Esta solicitud es diferente de la solicitud de cliente confidencial, donde el ID de cliente y el secreto de cliente se especifican en la cabecera de autenticación básica. En el flujo de cliente público, no hay ninguna cabecera de autenticación básica. El ID de cliente se especifica como parte de la carga útil de la solicitud.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>'Ejemplo de respuesta
{ "access_token":"eyJ4NXQjUzI1???.xhtnbw", "token_type":"Bearer", "expires_in":27261, "id_token":"eyJ4NXQjUzI1???.._XLqUw" }
Uso del flujo implícito con OpenID Connect
Utilice el flujo implícito cuando haya implantado un cliente basado en explorador mediante un lenguaje de secuencias de comandos como JavaScript. El token de acceso y el token de ID se devuelven directamente al cliente, lo que puede exponer estos tokens al usuario y a las aplicaciones que tienen acceso al agente de usuario del usuario (como un explorador web).
Authorization y el punto final token no se utiliza. El flujo implícito funciona con clientes confidenciales, de confianza y públicos.Los clientes públicos no tienen credenciales, solo un identificador de cliente.
Los siguientes valores response_type están soportados con el flujo implícito:
-
id_token(token de ID) -
token(token de acceso) -
id_token token(tanto el token de ID como el token de acceso)
Obtención de un token de ID
Solicitar el token.
Ejemplo de solicitud
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefgEl usuario se conecta y da su consentimiento (en función de los ámbitos solicitados)
Respuesta con token de ID
Ejemplo de respuesta
Nota
Todos los parámetros de respuesta se agregan al componente de fragmento del URI de redirección.https://<domainURL>/#id_token=eyJ4NXQjUzI1.....gF5uyQ
Obtención de un token de acceso
Hay tres pasos en el flujo implícito para obtener un token de acceso:
-
Solicite el símbolo de acceso.
Ejemplo de solicitud
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile -
El usuario se conecta y da su consentimiento (en función de los ámbitos solicitados).
-
Respuesta con token de acceso
Ejemplo de respuesta
Nota
Todos los parámetros de respuesta se agregan al componente de fragmento del URI de redirección.https://<domainURL>/#access_token=eyJ4NXQjUzI1...4WGvJQ&token_type=Bearer&expires_in=3600
Obtención de un token de ID y un token de acceso
Solicite el token de ID y el token de acceso.
Ejemplo de solicitudhttps://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefghijklEl usuario se conecta y da su consentimiento (en función de los ámbitos solicitados).
Respuesta con token de acceso y token de ID.
Ejemplo de respuestaNota
Todos los parámetros de respuesta se agregan al componente de fragmento del URI de redirección.https://<domainURL>/#access_token=eyJ4NXQjUzI....XWGmeQ&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=3600
Uso del flujo híbrido con OpenID Connect
Utilice el flujo híbrido cuando desee obtener tokens por separado tanto del canal frontal como del canal posterior. Por ejemplo, tiene un componente de explorador como JavaScript y un componente de servidor de backend como Node.js. El componente del explorador obtiene el código de autorización y el token de ID y, a continuación, puede personalizar el contenido de la interfaz de usuario. El componente de backend obtiene el token de acceso para realizar llamadas de API de negocio.
Los clientes deben admitir tanto las solicitudes y respuestas basadas en explorador como las solicitudes y respuestas programáticas/de canal posterior para utilizar el flujo híbrido. El flujo híbrido funciona tanto con clientes confidenciales como con clientes públicos. Los siguientes valores response_type están soportados con el flujo híbrido:
-
code id_token(token de ID) -
code token(token de acceso) -
code id_token token(código de autorización, token de ID y token de acceso)
Obtención de un token de ID
Solicite el código de autorización y el token de ID.
Ejemplo de solicitud
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=abcdefghijkEl usuario se conecta y da su consentimiento (en función de los ámbitos solicitados).
Respuesta con token de ID y código de autorización.
Ejemplo de respuesta
Nota
Todos los parámetros de respuesta se agregan al componente de fragmento del URI de redirección.https://<domainURL>/#code=AQIDBAUrAi0l....F9NCA=&id_token=eyJ4NXQjUzI1....3R8b_QLa aplicación cliente utiliza el código de autorización y realiza una solicitud de canal secundario para obtener un nuevo token de acceso y tokens de refrescamiento.
Ejemplo de solicitud
curl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAUrAi0l???.CA%3D'Ejemplo de respuesta
{ "access_token":"eyJ4NXQjUzI1....sJ5mCw", "token_type":"Bearer", "expires_in":3600, "refresh_token":"AQIDBAUwxxoC....tZLvA" }
Obtención de un token de acceso
El flujo híbrido consta de cuatro pasos para obtener el código de autorización y el token de acceso:
-
Solicite el código de autorización y el token de acceso.
Ejemplo de solicitud
https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code token&redirect_uri=<client_redirect_uri>&scope=http://<domainURL>/test -
El usuario se conecta y da su consentimiento (en función de los ámbitos solicitados).
-
Respuesta con token de ID y código de autorización.
Ejemplo de respuesta
Nota
Todos los parámetros de respuesta se agregan al componente de fragmento del URI de redirección.https://<domainURL>/#access_token=eyJ4NXQjUzI1....Pudw9A&code=AQIDBAU6d6Ae....F9NCA=&token_type=Bearer&expires_in=3600 -
La aplicación cliente utiliza el código de autorización y realiza una solicitud de canal secundario para obtener un nuevo token de acceso.
Ejemplo de solicitudcurl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*'' --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAU6d6Ae...NCA%3D'Ejemplo de respuesta
{ "access_token":"eyJ4NXQjUzI1....Tgs9LA", "token_type":"Bearer", "expires_in":3600 }
Obtención de un token de ID y un token de acceso
Solicite el código de autorización y el token de ID.
Ejemplo de solicitudhttps://<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=abcdaerEl usuario se conecta y da su consentimiento (en función de los ámbitos solicitados).
Respuesta con token de ID y token de acceso.
Ejemplo de respuestaNota
Todos los parámetros de respuesta se agregan al componente de fragmento del URI de redirección.https://<domainURL>/#access_token=eyJ4NXQjUzI1....sDB7lA&code=AQIDBAVxZzy-....F9NCA=&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=36004La aplicación cliente utiliza el código de autorización y realiza una solicitud de canal secundario para obtener un nuevo token de acceso.
Ejemplo de solicitudcurl -i -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5' -H 'Accept: */*' ?request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAXUbLmS???.NCA%3D'Ejemplo de respuesta
{ "access_token":"eyJ4NXQjUzI1....g52XmQ", "token_type":"Bearer", "expires_in":3600, "id_token":"eyJ4NXQjUzI1....f6JfWA" }
Uso de OpenID Connect para cerrar sesión
Puede utilizar OpenID Connect para solicitudes de desconexión basadas en explorador.
Hay dos formas de solicitar una desconexión mediante OpenID Connect:
-
Redirigir al cliente que inició la desconexión.
Nota
Asegúrese de definir el URI de redireccionamiento posterior a la desconexión para la aplicación cliente OAuth y de que el token de ID se envía en la solicitud. El token de ID contiene el ID de cliente. La URL posterior a la desconexión correspondiente de ese ID de cliente se recupera y valida.Ejemplo de solicitud
https://<domainURL>/oauth2/v1/userlogout?post_logout_redirect_uri=http://clienthost:port/myapp/return&state=c3004d28&id_token_hint=<IDToken> -
Utilice la página de llegada del inquilino.
Nota
Se utiliza la página de llegada del inquilino definida en la configuración de SSO del inquilino.Ejemplo de solicitud
https://<domainURL>/oauth2/v1/userlogout