Usando o OpenID Connect para estender o OAuth 2.0

O OpenID Connect estende o protocolo OAuth 2.0 para adicionar uma camada simples de autenticação e identidade que fica no topo do OAuth 2.0.

Use o OpenID Connect quando quiser que seus aplicativos baseados em nuvem obtenham informações de identidade, recuperem detalhes sobre o evento de autenticação (como quando, onde e como a autenticação ocorreu) e permitam o sign-on único federado (SSO).

O OAuth 2.0 fornece tokens de segurança para uso ao chamar recursos de backend em nome de um usuário. OAuth fornece a uma concessão ou licença a capacidade de acessar recursos em vez de fornecer informações sobre a própria autenticação. Usar OAuth para autenticação é como um gerente de apartamento dando a alguém que quer saber sua identidade uma chave temporária para o seu apartamento. A chave implica apenas o direito de entrar no apartamento por um período específico de tempo. Isso não significa que o indivíduo é o proprietário.

O uso do OpenID Connect completa a imagem fornecendo aos aplicativos informações sobre o usuário, o contexto de sua autenticação e o acesso às informações de seu perfil. O OpenID Connect permite que clientes de todos os tipos, incluindo clientes baseados na web, móveis e JavaScript, solicitem e recebam informações sobre sessões autenticadas e usuários finais. Consulte OpenID Connect para obter mais informações.

dois conceitos são introduzidos:
  • Token de ID do OpenID Connect: esse token contém informações sobre a sessão autenticada do usuário.

  • Ponto final UserInfo: esse ponto final fornece uma maneira de o cliente recuperar atributos adicionais sobre o usuário.

Implementando o OpenID Connect

Há três ações principais necessárias para implementar o OpenID Connect:

  1. Obter um Token de ID do OpenID Connect: Use um tipo de concessão OAuth2 para solicitar um Token de ID do OpenID Connect, incluindo o escopo openid na solicitação de autorização.

    Os casos de uso a seguir fornecem exemplos de solicitações e respostas para obter o Token de ID.

  2. Validar o Token de ID: valide o Token de ID para garantir que ele tenha sido originado de um emissor confiável e que o conteúdo não tenha sido adulterado durante o trânsito.

    O caso de uso a seguir fornece informações sobre como e o que validar.

  3. Recuperar informações de perfil do ponto final UserInfo: Usando o Token de Acesso OAuth2, acesse o ponto final UserInfo para recuperar informações de perfil sobre o usuário autenticado.

    O caso de uso a seguir fornece exemplos de solicitações e respostas para recuperar informações de perfil do ponto final UserInfo.

Token de Identidade

Um Token de Identidade é um token independente e protegido pela integridade (no formato JWT (JSON Web Token) definido no padrão OpenID Connect que contém reivindicações sobre o usuário final. O Token de Identidade é a extensão principal que o OpenID Connect faz para o OAuth 2.0 para ativar a autenticação em um domínio de identidades.

O JWT do Token de Identidade consiste em três componentes, um cabeçalho, um payload e a assinatura digital. Seguindo o padrão JWT, essas três seções são codificadas e separadas por pontos em Base64URL.

Observação

As solicitações do OpenID Connect devem conter o valor do escopo openid.

O OpenID Connect 1.0 é uma camada de identidade simples no topo do protocolo OAuth 2.0. Ele permite que um aplicativo cliente do domínio de identidades do IAM (registrado como um cliente OAuth 2 com ID e segredo do cliente) verifique a identidade do usuário final com base na autenticação executada por um Servidor de Autorização (AS) e obtenha informações básicas de perfil sobre o usuário final de maneira interoperável e semelhante a REST. O OpenID Connect permite que clientes de todos os tipos, incluindo clientes baseados na web, móveis e JavaScript, solicitem e recebam informações sobre sessões autenticadas e usuários finais. Consulte OpenID Connect para obter mais informações.

Nome Valor
amr Referências a Métodos de Autenticação. Array JSON de strings que são identificadores para métodos de autenticação usados na autenticação. Por exemplo, os valores podem indicar que os métodos de autenticação de senha e OTP foram usados.
at_hash Valor de hash do Token de Acesso OAuth 2.
aud Identifica os destinatários para os quais este Token de ID se destina. Deve ser o OAuth 2.0 client_id (de acordo com a especificação do OpenID Connect). Este é o nome do cliente OAuth (app.name) que está fazendo a solicitação. Aud também contém o Emissor do domínio de identidades do IAM, transformando assim o tipo de token (IT) em uma Asserção de Usuário do domínio de identidades do IAM.
authn_strength* O valor retornado pelo SSO de Cloud indicando Força da Autenticação do Contexto AuthN.
auth_time O horário (horário da época do UNIX) em que o Cloud SSO realmente autenticou o usuário (em segundos, vindo do Contexto AuthN).
azp Parte autorizada. A parte para a qual o Token de ID foi emitido. Se presente, deve conter o OAuth 2.0 Client ID desta parte. Essa reivindicação só é necessária quando o Token de ID tem um único valor de público e esse público é diferente da parte autorizada. Pode ser incluído mesmo quando a parte autorizada é a mesma que o único público. O valor azp faz distinção entre maiúsculas e minúsculas e contém um valor StringOrURI.
exp O tempo de expiração (horário da época UNIX) no qual ou após o qual o Token de ID não deve ser aceito para processamento. Esse valor deve ser igual ao session_exp.
iat O horário (horário da época UNIX) em que o JWT foi criado (em segundos). O UNIX Epoch Time é um número JSON que representa o número de segundos de 1970-01-01T0:0:0Z, conforme medido no UTC (Coordinated Universal Time) até a data/hora.
iss O principal que emitiu o token: https://<domainURL>
jti O identificador exclusivo gerado pelo servidor para o ID JWT.
nonce O valor da string usado para associar uma sessão do cliente a um Token de ID e para mitigar ataques de repetição. Esse valor é fornecido pelo Cloud Gate.
session_exp* O horário (horário da época do UNIX) em que a sessão SSO do Cloud expira (segundos, deve ser a mesma expiração da sessão do SSO no contexto AuthN).
sid O ID da sessão do Cloud SSO (máximo de 255 caracteres ASCII) no Contexto AuthN.
sub Identifica o usuário. O identificador do assunto é exclusivo localmente, nunca reatribuído e deve ser consumido pelo cliente: ID de Log-in do Usuário (máximo de 255 caracteres ASCII). Este é o ID de login do usuário do Contexto AuthN.
sub_mappingattr* O atributo usado para localizar a subárea no armazenamento de IDs.
tok_type* Identifica o tipo de token: IT
user_displayname* O Nome de Exibição do Usuário (máximo de 255 caracteres ASCII) do Contexto AuthN.
user_csr* Indica (verdadeiro) que o usuário é um Representante de Atendimento ao Cliente (CSR).
user_id* O GUID do domínio de identidades do IAM do usuário no Contexto AuthN.
user_lang* O idioma preferido do usuário.
user_locale* A configuração regional do usuário.
user_tenantname* O Nome do Tenant do Usuário (no máximo 255 caracteres ASCII). O GUID do locatário não foi salvo especificamente no token
user_tz* O fuso horário do usuário.

Validação do Token de Identidade

Por que validamos tokens? Quando seu aplicativo web verifica as credenciais diretamente, ele verifica se o nome de usuário e a senha apresentados correspondem ao que você mantém. Ao usar a identidade baseada em reivindicações, você está terceirizando esse trabalho para um provedor de identidades.

A responsabilidade muda da verificação de credenciais brutas para a verificação de que o solicitante passou por seu provedor de identidades preferencial e foi autenticado com sucesso. O provedor de identidades representa a autenticação bem-sucedida emitindo um token. Antes de usar as informações ou confiar nelas como uma afirmação de que o usuário foi autenticado, você deve validá-las.

OpenID Documento de Descoberta

O protocolo OpenID Connect 1.0 é uma camada de identidade simples no topo do protocolo OAuth 2.0 que requer o uso de vários pontos finais para autenticar usuários e para solicitar recursos que incluam informações do usuário, tokens e chaves públicas. Para ajudar a descobrir quais são esses pontos finais que você precisa usar, o OpenID Connect permite que você use um documento de descoberta, que é um documento JSON encontrado em um local bem conhecido. Este documento de descoberta contém pares de chave/valor que fornecem detalhes sobre a configuração do provedor do OpenID Connect, incluindo os URIs dos pontos finais de autorização, token, informações do usuário e chaves públicas. Você pode recuperar o documento de descoberta do serviço OpenID Connect do domínio de identidades do IAM em: https://<domainURL>/.well-known/openid-configuration.

Validando Tokens de Identidade

Um Token de Identidade (ID) é um token independente e protegido pela integridade (no formato JSON Web Token) que contém reivindicações sobre o usuário final. Representa a sessão de um usuário autenticado. Portanto, o token deve ser validado para que um aplicativo possa confiar no conteúdo do Token de ID. Por exemplo, se um invasor mal-intencionado repetir o Token de ID de um usuário que ele havia capturado anteriormente, o aplicativo deverá detectar que o token foi repetido ou foi usado depois que ele expirou e negar a autenticação.

O Token de ID é definido no padrão do OpenID Connect e é a extensão principal que o OpenID Connect faz para o OAuth 2.0 para ativar a autenticação. Tokens de ID são sensíveis e podem ser mal utilizados se interceptados. Certifique-se de que esses tokens sejam tratados de forma segura, transmitindo-os apenas via HTTPS e usando apenas dados POST ou em cabeçalhos de solicitação. Se você armazená-los em seu servidor, você também deve armazená-los com segurança.
  1. Verifique se o valor da reivindicação de público (aud) contém o valor client_id do aplicativo. A reivindicação aud (público) pode conter um array com mais de um elemento. O Token de ID deverá ser rejeitado se o token de ID não listar o cliente como um público-alvo válido ou se ele contiver públicos-alvo adicionais que não são confiáveis pelo cliente.

  2. Verifique se o horário atual é anterior ao horário representado pela reivindicação de tempo de expiração (exp).

  3. Verifique se o Token de ID está devidamente assinado pelo emissor. Os tokens emitidos pelo domínio de identidades são assinados usando um dos certificados encontrados no URI especificado no campo jwks_uri do documento de descoberta.
    • Recupere o certificado público do tenant no ponto final SigningCert/jwk (por exemplo, https://acme.identity.oraclecloud.com/admin/v1/SigningCert/jwk).

      Observação

      Como os domínios de identidades alteram as chaves públicas com pouca frequência, você pode armazenar em cache as chaves públicas e, na grande maioria dos casos, executar com eficiência a validação local. Isso requer recuperar e analisar certificados e fazer as chamadas de criptografia apropriadas para verificar a assinatura:
    • Use qualquer biblioteca JWT disponível para validar, por exemplo, a Biblioteca JWT Nimbus do Connect2id para Java. Consulte JWT para obter uma lista de bibliotecas disponíveis.

      Observação

      No caso de falha na validação da assinatura, para evitar novas buscas constantes em caso de ataques com tokens falsos, a nova extração/rearmazenamento em cache da chave pública deve ser baseada em um intervalo de tempo, como 60 minutos, para que as novas buscas ocorram apenas a cada 60 minutos.

    Exemplo

    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 se o valor da reivindicação do Identificador do Emissor (iss) corresponde exatamente ao valor da reivindicação do iss (emissor): https://<domainURL>/

Consultando o Ponto Final UserInfo

O ponto final UserInfo do OpenID Connect é usado por um aplicativo para recuperar informações de perfil sobre a identidade autenticada. Os aplicativos podem usar esse ponto final para recuperar informações de perfil, preferências e outras informações específicas do usuário.

O perfil do OpenID Connect consiste em dois componentes:

  • Reivindicações que descrevem o usuário

  • Ponto final UserInfo que fornece um mecanismo para recuperar essas reivindicações
    Observação

    As reivindicações do usuário também podem ser apresentadas dentro do Token de ID para eliminar um callback durante o tempo de autenticação.

Perfil do usuário - Reivindicações

O ponto final UserInfo fornece um conjunto de reivindicações com base nos escopos OAuth2 apresentados na solicitação de autenticação. O OpenID Connect define cinco valores de escopo que são mapeados para um conjunto específico de reivindicações padrão:

Escopo do OpenID Connect Reivindicações devolvidas

openid

Nenhum - Indica que esta é uma solicitação do OpenID Connect

perfil

name, family_name, given_name, middle_name, nickname, preferred_username, perfil, imagem, site, sexo, data de nascimento, informações de região, localidade, updated_at

endereço

endereço

e-mail

email, email_verified

telefone

phone_number, phone_number_verified

O cliente precisa apresentar suas credenciais e um token de acesso. O token de acesso apresentado precisa conter o escopo openid.

Se um escopo for omitido (por exemplo, o escopo email não for usado), a reivindicação (email) não estará presente nas reivindicações retornadas.

Exemplo de Solicitação de Ponto Final UserInfo

Depois que o aplicativo cliente tiver autenticado um usuário e tiver o token de acesso, o cliente poderá fazer uma solicitação ao ponto final UserInfo para recuperar os atributos solicitados sobre um usuário. O exemplo a seguir mostra um exemplo de solicitação.

   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

Exemplo de Resposta

Uma resposta bem-sucedida retorna uma resposta HTTP 200 OK e as reivindicações do usuário no 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":""
}

Para que o aplicativo cliente possa confiar nos valores retornados do ponto final UserInfo (por exemplo, como um ataque de substituição de token de verificação), o cliente deve verificar se a reivindicação sub retornada da solicitação de ponto final UserInfo corresponde ao assunto do Token de ID.

Usando o Fluxo de Código de Autorização com o OpenID Connect

Use o fluxo Código de Autorização quando tiver clientes que possam manter com segurança um segredo de cliente entre eles e o Servidor de Autorização. O fluxo Código de Autorização retorna um Código de Autorização para o cliente, que pode então trocar o código por um Token de ID e um Token de Acesso diretamente.

Isso fornece a você o benefício de não expor nenhum token ao agente do usuário (como um navegador da Web) e possivelmente a outros aplicativos maliciosos com acesso ao agente do usuário. O Servidor de Autorização também pode autenticar o cliente antes de trocar o Código de Autorização por um Token de Acesso. O fluxo Código de autorização funciona com Clientes confidenciais e Clientes públicos.

Clientes Confidenciais

Há duas etapas no fluxo do Código de Autorização:
  1. Solicite o Código de Autorização. Nesta solicitação, o valor do parâmetro de escopo é openid. Este é um valor de especificação OpenID Connect.

    Exemplo de Solicitação

    https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid

    Exemplo de Resposta

    https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA=
    • Você pode fornecer valores de escopo adicionais em suas solicitações, por exemplo:

      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 solicitação contém o escopo de recurso openid e OAuth:

      https://<domainURL>/oauth2/v1/authorize?client_id=<client-id>&response_type=code&redirect_uri=<client-redirect-uri>&scope=http://<domainURL>/api+openid
  2. Solicitar o Token. O cliente extrai o parâmetro de código da resposta e faz a solicitação de token. Além disso, o cliente fornece seu ID de cliente e segredo como parte do cabeçalho Autenticação Básica.

    Exemplo de Solicitação

       curl -i
       -H 'Authorization: Basic ZWE1OGIwNDA0N2ZkNGQ4MTgyYThiYWQ0ZTNkMGFmZjU6ZGMxNGE4MjMtZGU2OC00YWNhLTg1OWUtMWNhZTJmNjQ0NTBi' 
       -H 'Accept: */*'
       --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAXv9lZQ???.jF9NCA'

    Exemplo de Resposta

    A solicitação contém o Token de Acesso e o Token de ID.

    {
    "access_token":"eyJ4NXQjUzI1???.xhtnbw",
    "token_type":"Bearer",
    "expires_in":27261,
    "id_token":"eyJ4NXQjUzI1???.._XLqUw"
    }

Clientes Públicos

Os clientes públicos não têm credenciais, mas têm um identificador de cliente. Há duas etapas no fluxo do Código de Autorização. As solicitações envolvem uma solicitação GET baseada em browser e, em seguida, uma solicitação POST de canal traseiro para obter o Token de Acesso.

  1. Solicite o Código de Autorização.

    Exemplo de Solicitação

    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

    Exemplo de Resposta

    Observação

    Esses exemplos de solicitação e resposta são semelhantes aos da solicitação do Cliente Confidencial e às respostas discutidas anteriormente.
    https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA=
  2. Solicitar o Token.

    Exemplo de Solicitação

    Observação

    Essa solicitação é diferente da solicitação do Cliente Confidencial em que o id do cliente e o segredo do cliente são especificados no cabeçalho Autenticação Básica. No fluxo de cliente público, não há cabeçalho de Autenticação Básica. O id do cliente é especificado como parte do payload da solicitação.
       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>'

    Exemplo de Resposta

    {
    "access_token":"eyJ4NXQjUzI1???.xhtnbw",
    "token_type":"Bearer",
    "expires_in":27261,
    "id_token":"eyJ4NXQjUzI1???.._XLqUw"
    }
    

Usando o Fluxo Implícito com o OpenID Connect

Use o fluxo Implícito quando tiver implementado um cliente baseado em browser usando uma linguagem de script, como JavaScript. O Token de Acesso e o Token de ID são retornados diretamente ao Cliente, o que pode expor esses tokens ao usuário e aos aplicativos que têm acesso ao agente de usuário do usuário (como um navegador da Web).

Não há solicitação de token programática/de back-channel envolvida neste fluxo (como a solicitação do Cliente Público no exemplo de fluxo do Código de Autorização). Todos os tokens são retornados do ponto final Authorization e o ponto final token não é usado. O fluxo implícito funciona com clientes confidenciais, confiáveis e públicos.
Observação

Os clientes públicos não têm credenciais, apenas um identificador de cliente.

Há suporte para os seguintes valores response_type com o fluxo Implícito:

  • id_token (Token de ID)

  • token (Token de acesso)

  • id_token token (Token de ID e Token de Acesso)

Obtendo um Token de ID

Há três etapas no fluxo Implícito para obter um Token de ID:
  1. Solicitar o token.

    Exemplo de Solicitação

    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. O usuário faz login e dá consentimento (com base nos escopos solicitados)

  3. Resposta com Token de ID

    Exemplo de Resposta

    Observação

    Todos os parâmetros de resposta são adicionados ao componente de fragmento do URI de redirecionamento.
    https://<domainURL>/#id_token=eyJ4NXQjUzI1.....gF5uyQ

Obtendo um Token de Acesso

Há três etapas no fluxo Implícito para obter um Token de Acesso:

  1. Solicitar o Token de Acesso.

    Exemplo de Solicitação

    https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=token&redirect_uri=<client_redirect_uri>&scope=address+openid+profile
  2. O usuário faz login e dá consentimento (com base nos escopos solicitados).

  3. Resposta com Token de Acesso

    Exemplo de Resposta

    Observação

    Todos os parâmetros de resposta são adicionados ao componente de fragmento do URI de redirecionamento.
    https://<domainURL>/#access_token=eyJ4NXQjUzI1...4WGvJQ&token_type=Bearer&expires_in=3600

Obtendo um Token de ID e um Token de Acesso

Há três etapas no fluxo Implícito para obter o Token de ID e o Token de Acesso:
  1. Solicite o Token de ID e o Token de Acesso.

    Exemplo de Solicitação
    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. O usuário faz login e dá consentimento (com base nos escopos solicitados).

  3. Resposta com Token de Acesso e Token de ID.

    Exemplo de Resposta
    Observação

    Todos os parâmetros de resposta são adicionados ao componente de fragmento do URI de redirecionamento.
    https://<domainURL>/#access_token=eyJ4NXQjUzI....XWGmeQ&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=3600

Usando o Fluxo Híbrido com o OpenID Connect

Use o fluxo Híbrido quando quiser obter tokens separadamente do canal frontal e do canal traseiro. Por exemplo, você tem um componente do browser como JavaScript e um componente do servidor de backend como Node.js. O componente do navegador obtém o Código de Autorização e o Token de ID e pode personalizar o conteúdo da IU. O componente de backend obtém o Token de Acesso para executar chamadas de API de negócios.

Os clientes precisam oferecer suporte a solicitações e respostas baseadas em navegador e a solicitações e respostas programáticas/de back-channel para usar o fluxo Híbrido. O fluxo Híbrido funciona com Clientes Confidenciais e Clientes Públicos. Os seguintes valores response_type são suportados com o fluxo Híbrido:

  • code id_token (Token de ID)

  • code token (Token de Acesso)

  • code id_token token (Código de Autorização, Token de ID e Token de Acesso)

Obtendo um Token de ID

Há quatro etapas no fluxo Híbrido para obter o Código de Autorização e o Token de ID:
  1. Solicite o Código de Autorização e o Token de ID.

    Exemplo de Solicitação

    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. O usuário faz login e dá consentimento (com base nos escopos solicitados).

  3. Resposta com Token de ID e Código de Autorização.

    Exemplo de Resposta

    Observação

    Todos os parâmetros de resposta são adicionados ao componente de fragmento do URI de redirecionamento.
    https://<domainURL>/#code=AQIDBAUrAi0l....F9NCA=&id_token=eyJ4NXQjUzI1....3R8b_Q
  4. O aplicativo cliente faz uso do Código de Autorização e faz uma solicitação de canal de retorno para obter um novo Token de Acesso e Tokens de Atualização.

    Exemplo de Solicitação

       curl -i
       -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5'
       -H 'Accept: */*'
       --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAUrAi0l???.CA%3D'
    

    Exemplo de Resposta

    {
    "access_token":"eyJ4NXQjUzI1....sJ5mCw",
    "token_type":"Bearer",
    "expires_in":3600,
    "refresh_token":"AQIDBAUwxxoC....tZLvA"
    }

Obtendo um Token de Acesso

Há quatro etapas no fluxo Híbrido para obter o Código de Autorização e o Token de Acesso:

  1. Solicite o Código de Autorização e o Token de Acesso.

    Exemplo de Solicitação

    https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=code token&redirect_uri=<client_redirect_uri>&scope=http://<domainURL>/test
  2. O usuário faz login e dá consentimento (com base nos escopos solicitados).

  3. Resposta com Token de ID e Código de Autorização.

    Exemplo de Resposta

    Observação

    Todos os parâmetros de resposta são adicionados ao componente de fragmento do URI de redirecionamento.
    https://<domainURL>/#access_token=eyJ4NXQjUzI1....Pudw9A&code=AQIDBAU6d6Ae....F9NCA=&token_type=Bearer&expires_in=3600
  4. O aplicativo cliente faz uso do Código de Autorização e faz uma solicitação de canal de retorno para obter um novo Token de Acesso.

    Exemplo de Solicitação
       curl -i
      -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5'
       -H 'Accept: */*''
       --request POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAU6d6Ae...NCA%3D'

    Exemplo de Resposta

    {
    "access_token":"eyJ4NXQjUzI1....Tgs9LA",
    "token_type":"Bearer",
    "expires_in":3600
    }

Obtendo um Token de ID e um Token de Acesso

Há quatro etapas no fluxo Híbrido para obter o Código de Autorização, o Token de ID e o Token de Acesso:
  1. Solicite o Código de Autorização e o Token de ID.

    Exemplo de Solicitação
    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. O usuário faz login e dá consentimento (com base nos escopos solicitados).

  3. Resposta com Token de ID e Token de Acesso.

    Exemplo de Resposta
    Observação

    Todos os parâmetros de resposta são adicionados ao componente de fragmento do URI de redirecionamento.
    https://<domainURL>/#access_token=eyJ4NXQjUzI1....sDB7lA&code=AQIDBAVxZzy-....F9NCA=&id_token=eyJ4NXQjUzI1....&token_type=Bearer&expires_in=36004
  4. O aplicativo cliente faz uso do Código de Autorização e faz uma solicitação de canal de retorno para obter um novo Token de Acesso.

    Exemplo de Solicitação
       curl -i
       -H 'Authorization: Basic YjA3NTZkNDc5M2QwNDZjNjhjZWVmY2UxZjE4ZGUwMWM6NGYzZjJjN2EtZTBjZC00NzcyLWE5MTYtNjI3ZmExNzA2NWE5'
       -H 'Accept: */*' ?request
       POST 'https://<domainURL>/oauth2/v1/token' -d 'grant_type=authorization_code&code=AQIDBAXUbLmS???.NCA%3D'

    Exemplo de Resposta

    {
    "access_token":"eyJ4NXQjUzI1....g52XmQ",
    "token_type":"Bearer",
    "expires_in":3600,
    "id_token":"eyJ4NXQjUzI1....f6JfWA"
    }

Usando o OpenID Connect para Logout

Você pode usar o OpenID Connect para solicitações de logout baseadas em browser.

Há duas maneiras de solicitar um logout usando o OpenID Connect:

  1. Redirecione para o cliente que iniciou o logout.

    Observação

    Certifique-se de definir o URI de redirecionamento pós-log-out para o aplicativo Cliente OAuth e de que o Token de ID seja enviado na solicitação. O Token de ID contém o ID do cliente. O URL de pós-logout correspondente do ID do cliente é extraído e validado.

    Exemplo de Solicitação

    https://<domainURL>/oauth2/v1/userlogout?post_logout_redirect_uri=http://clienthost:port/myapp/return&state=c3004d28&id_token_hint=<IDToken>
  2. Use a landing page do inquilino.

    Observação

    Isso usa a página de destino do tenant que foi definida nas configurações de SSO do tenant.

    Exemplo de Solicitação

    https://<domainURL>/oauth2/v1/userlogout