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.

Se introducen dos conceptos:
  • 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:

  1. 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 openid en la solicitud de autorización.

    Los siguientes casos de uso proporcionan solicitudes y respuestas de ejemplo para obtener el token de ID.

  2. 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.

  3. Recuperar información de perfil del punto final UserInfo: mediante el token de acceso OAuth2, acceda al punto final UserInfo para 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.

Nota

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.

El token de ID se define en el estándar OpenID Connect y es la extensión principal que OpenID Connect realiza en OAuth 2.0 para activar la autenticación. Los tokens de ID son confidenciales y se pueden utilizar incorrectamente si se interceptan. Asegúrese de que estos tokens se gestionan de forma segura mediante la transmisión solo a través de HTTPS y solo mediante datos POST o en cabeceras de solicitud. Si los almacena en su servidor, también debe almacenarlos de forma segura.
  1. Compruebe que el valor de la reclamación de público (aud) contiene el valor client_id de la aplicación. La reclamación aud (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.

  2. Verifique que la hora actual sea anterior a la hora representada por la reclamación de la hora de caducidad (exp).

  3. 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_uri del 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();
            }
        }
     
    }
  4. Verifique que el valor de la reclamación del identificador de emisor (iss) coincida exactamente con el valor de la reclamación iss (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 UserInfo que proporciona un mecanismo para recuperar estas reclamaciones
    Nota

    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

Hay dos pasos en el flujo Código de autorización:
  1. 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=openid

    Ejemplo 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+email
      
    • Esta 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
  2. 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.

  1. 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=1234

    Ejemplo 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=
  2. 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).

No hay ninguna solicitud de token de canal programático/back implicada en este flujo (como la solicitud de cliente público en el ejemplo de flujo de código de autorización). Todos los tokens se devuelven desde el punto final Authorization y el punto final token no se utiliza. El flujo implícito funciona con clientes confidenciales, de confianza y públicos.
Nota

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

Hay tres pasos en el flujo implícito para obtener un token de ID:
  1. 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=abcdefg
  2. El usuario se conecta y da su consentimiento (en función de los ámbitos solicitados)

  3. 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:

  1. 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
  2. El usuario se conecta y da su consentimiento (en función de los ámbitos solicitados).

  3. 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

Hay tres pasos en el flujo implícito para obtener tanto el token de ID como el token de acceso:
  1. Solicite el token de ID y el token de acceso.

    Ejemplo de solicitud
    https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile&nonce=abcdefghijkl
  2. El usuario se conecta y da su consentimiento (en función de los ámbitos solicitados).

  3. Respuesta con token de acceso y 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>/#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

Hay cuatro pasos en el flujo híbrido para obtener tanto el código de autorización como el token de ID:
  1. 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=abcdefghijk
  2. El usuario se conecta y da su consentimiento (en función de los ámbitos solicitados).

  3. 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_Q
  4. 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 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:

  1. 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
  2. El usuario se conecta y da su consentimiento (en función de los ámbitos solicitados).

  3. 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
  4. 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 solicitud
       curl -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

El flujo híbrido consta de cuatro pasos para obtener el código de autorización, el token de ID y el token de acceso:
  1. 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=cod id_token token&redirect_uri=client_redirect_uri&scope=http://<domainURL>/test+openid&nonce=abcdaer
  2. El usuario se conecta y da su consentimiento (en función de los ámbitos solicitados).

  3. Respuesta con token de ID y 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....sDB7lA&code=AQIDBAVxZzy-....F9NCA=&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=36004
  4. 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 solicitud
       curl -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:

  1. 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>
  2. 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