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 na 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 (SSO) federado.

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 autenticação em si. Usar OAuth para autenticação é como um gerente de apartamento dando a alguém que quer saber sua identidade uma chave temporária para 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 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 se 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 autossuficiente seguro de integridade (no formato JWT (JSON Web Token) definido no padrão do 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 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 em Base64URL e separadas por pontos.

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 serviço IAM (registrado como um cliente OAuth 2 com ID do cliente 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 do perfil sobre o usuário final de maneira interoperável, 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 de 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 aos 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 serviço IAM, transformando assim o tipo de token (TI) em uma Asserção do Usuário do domínio de identidades do serviço IAM.
authn_strength* O valor retornado pelo SSO na Nuvem indicando a Força de Autenticação do Contexto AuthN.
auth_time O horário (tempo de época do UNIX) em que o Cloud SSO realmente autenticou o usuário (em segundos, proveniente do Contexto AuthN).
azp Parte autorizada. A parte para a qual o Token de ID foi emitido. Se presente, ele DEVE conter o ID do Cliente OAuth 2.0 desta parte. Essa reivindicação só é necessária quando o Token de ID tem um único valor de público-alvo e esse público-alvo é diferente da parte autorizada. Pode ser incluído mesmo quando a parte autorizada é a mesma que o público único. O valor azp é uma string que faz distinção entre maiúsculas e minúsculas que contém um valor StringOrURI.
exp O tempo de expiração (horário da época UNIX) no ou após o qual o Token de ID não deve ser aceito para processamento. Este valor deve ser o mesmo que session_exp.
iat O tempo (horário da época UNIX) em que o JWT foi criado (em segundos). UNIX Epoch Time é um número JSON que representa o número de segundos de 1970-01-01T0:0:0Z medido no Tempo Universal Coordenado (UTC) 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 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 do Cloud SSO 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) do Contexto AuthN.
sub Identifica o usuário. O identificador de assunto é localmente exclusivo, nunca reatribuído e destina-se a ser consumido pelo cliente: ID de login do usuário (máximo de 255 caracteres ASCII). Este é o ID de logon do usuário no Contexto AuthN.
sub_mappingattr* O atributo usado para localizar o sub no armazenamento de IDs.
tok_type* Identifica o tipo de token: IT
user_displayname* O Nome para 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 serviço IAM do usuário no Contexto AuthN.
user_lang* O idioma preferencial do usuário.
user_locale* A configuração regional do usuário.
user_tenantname* O Nome do Tenant do Usuário (máximo de 255 caracteres ASCII). O GUID do tenant não é salvo especificamente no token
user_tz* O fuso horário do usuário.

Validação de 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 verificar se o solicitante passou pelo provedor de identidades preferido e foi autenticado com sucesso. O provedor de identidades representa uma autenticação bem-sucedida emitindo um token. Antes de usar as informações ou confiar nelas como uma asserção que o usuário autenticou, 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 incluem 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 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 serviço IAM em: https://<domainURL>/.well-known/openid-configuration.

Validando Tokens de Identidade

Um Token de Identidade (ID) é um token independente e protegido por 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 reproduzir o Token de ID de um usuário capturado anteriormente, o aplicativo deverá detectar que o token foi reproduzido ou foi usado após a expiração 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 OAuth 2.0 para ativar a autenticação. Os tokens de identificação são sensíveis e podem ser usados incorretamente se interceptados. Certifique-se de que esses tokens sejam tratados com segurança transmitindo-os apenas por HTTPS e usando apenas dados POST ou dentro de 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-alvo (aud) contém o valor client_id do aplicativo. A reivindicação aud (público-alvo) 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 contiver públicos-alvo adicionais não confiáveis pelo cliente.

  2. Verifique se a hora atual é anterior à hora representada pela reivindicação de tempo de expiração (exp).

  3. Verifique se o Token de ID está assinado corretamente pelo emissor. Os tokens emitidos do 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 as chaves públicas em cache 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

      Em caso de falha de validação de assinatura, para evitar reajustes constantes em caso de ataques com tokens falsos, o reajuste/rearmazenamento em cache da chave pública deve ser baseado em um intervalo de tempo, como 60 minutos, para que as reajustes só ocorram 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 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 fornecendo 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.

Reivindicações do perfil do usuário

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 mapeiam para um conjunto específico de reivindicações padrão:

Escopo do OpenID Connect Pedidos de indenização devolvidos

openid

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

perfil

nome, family_name, given_name, middle_name, apelido, preferred_username, perfil, foto, site, sexo, data de nascimento, zoneinfo, configuração regional, updated_at

endereço

endereço

email

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 de Amostra

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 OK HTTP 200 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 uma verificação de ataque de substituição de token), 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 ao cliente, que pode então trocar o código por um Token de ID e um Token de Acesso diretamente.

Isso oferece a você o benefício de não expor nenhum token ao agente do usuário (como um navegador da Web) e possivelmente 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 tanto com Clientes Confidenciais quanto com Clientes Públicos.

Clientes Confidenciais

Há duas etapas no fluxo 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 do 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. Solicite 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 e segredo como parte do cabeçalho de 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; em vez disso, eles têm um identificador de cliente. Há duas etapas no fluxo Código de autorização. As solicitações envolvem uma solicitação GET baseada em navegador e, em seguida, uma solicitação POST de canal de retorno 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 à solicitação do Cliente Confidencial e às respostas discutidas anteriormente.
    https://<domainURL>/?code=AQIDBAXv9lZQ....F9NCA=
  2. Solicite o Token.

    Exemplo de Solicitação

    Observação

    Esta solicitação é diferente da solicitação do Cliente Confidencial na qual o id do cliente e o segredo do cliente são especificados no cabeçalho Autenticação Básica. No fluxo do 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ático/de canal traseiro 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.

Os seguintes valores response_type são suportados com o fluxo Implícito:

  • id_token (Token de ID)

  • token ( Token de Acesso)

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

Obtendo um Token de ID

Há três etapas no fluxo Implícito para obter um Token de ID:
  1. Solicite 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 efetua log-in 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. Solicite 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 efetua log-in 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 efetua log-in 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 interface do usuário. O componente de backend obtém o Token de Acesso para executar chamadas de API de negócios.

Os clientes precisam suportar solicitações e respostas baseadas em navegador e solicitações e respostas programáticas/de canal traseiro 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 efetua log-in 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 Atualizar Tokens.

    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 efetua log-in 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 efetua log-in 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 Log-out

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

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-logout 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-log-out correspondente desse id de 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 página de destino do inquilino.

    Observação

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

    Exemplo de Solicitação

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