Tipo de Concessão do Código de Autorização

Use este tipo de concessão quando quiser obter um código de autorização usando um servidor de autorização como um intermediário entre o aplicativo cliente e a proprietária do recurso usando domínios de identidade.

O diagrama a seguir exibe o fluxo Tipo de Concessão do Código de Autorização.

Um diagrama que ilustra o fluxo do tipo de concessão do código de autorização.
Neste fluxo OAuth:
  1. Um usuário clica em um link em um aplicativo cliente de servidor Web, solicitando acesso a recursos protegidos.

  2. O aplicativo cliente redireciona o browser para o ponto final de autorização oauth2/v1/authorize com uma solicitação de um código de autorização.

  3. O Servidor de Autorização retorna um código de autorização para o aplicativo cliente por meio de um redirecionamento do navegador após o proprietário do recurso dar consentimento.

  4. O aplicativo cliente então troca o código de autorização por um sinal de acesso e, geralmente, um sinal de atualização.

  5. O Servidor de Autorização retorna o token de acesso ao aplicativo cliente.

  6. O aplicativo cliente usa o token de acesso em uma chamada de API para obter dados protegidos.
    Observação

    As credenciais do proprietário do recurso nunca são expostas ao cliente.
Função Disponível
Requer autenticação do cliente Não
Exige que o cliente saiba as credenciais do usuário Não
Interação do usuário final baseada em navegador Sim
Pode usar um Provedor de Identidades externo para autenticação Sim
O token de atualização é permitido Sim
O token de acesso está no contexto do usuário final Sim

Consulte um exemplo de Exemplo de Fluxo de Autorização de Tipo de Concessão de Código de Autorização.

Exemplo de Fluxo de Autorização do Tipo de Concessão do Código de Autorização

Este exemplo de fluxo de autorização o orienta por uma solicitação de log-in do OpenID Connect usando um código de autorização.

Esse fluxo é um fluxo OAuth de três etapas, que se refere a cenários nos quais o aplicativo chama as APIs do domínio de identidades em nome dos usuários finais e nos quais o consentimento do usuário às vezes é necessário. Este fluxo mostra como configurar o Sign-On Único Federado entre um domínio de identidades e um aplicativo personalizado usando OAuth 2.0 e OpenID Connect.

Quando você cria um aplicativo usando o tipo de concessão Código de Autorização na Console do domínio de identidades:

  • Especifique Aplicativo Confiável como o tipo de aplicativo.

  • Selecione Código de Autorização como o tipo de concessão.

  • Especifique o URI de Redirecionamento, que é onde as respostas às solicitações de autenticação são enviadas.

  • Opcionalmente, selecione o tipo de concessão Token de Atualização para retornar um token de atualização com o token de acesso.

Consulte Tipo de Concessão do Código de Autorização para obter mais informações sobre o tipo de concessão do Código de Autorização e um diagrama de fluxo de autorização.

Fluxo de Autorização

  1. Um usuário clica em um link no aplicativo cliente do servidor Web (Cotações do Cliente), solicitando acesso a recursos protegidos.

  2. O aplicativo Cotações do Cliente redireciona o browser para o ponto final de autorização do domínio de identidades (oauth2/v1/authorize) com uma solicitação de código de autorização.

    O URL da solicitação contém parâmetros de consulta que indicam o tipo de acesso que está sendo solicitado.
    Observação

    Um valor nonce é uma string aleatória criptograficamente forte que você usa para evitar que respostas interceptadas sejam reutilizadas.

    Exemplo de solicitação: cliente confidencial/confiável

    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 solicitação: cliente confidencial/confiável incluindo token de atualização na solicitação

    GET https://<domainURL>/oauth2/v1/authorize?client_id=<client-id&response_type=code&redirect_uri=<client-redirect-uri>&scope=openid%20<Resource
    Server Scope>%20offline_access&nonce=<nonce-value>&state=1234

    Exemplo de Solicitação: Cliente Público

    GET https://<domainURL>/oauth2/v1/authorize?client_id=<client_id>&response_type=id_token&redirect_uri=<client-redirect-uri>&scope=openid&nonce=<nonce-value>&state=1234

    Exemplo de Solicitação Usando PKCE

    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&code_challenge=<code-challenge>&code_challenge_method=<plain|S256>'
  3. O domínio de identidades recebe a solicitação e identifica que o aplicativo Cotações do Cliente (identificado por seu client_id) está solicitando um código de autorização para obter mais informações sobre o proprietário do recurso (escopo openid).)

  4. Se o usuário ainda não estiver conectado, o serviço IAM desafiará o usuário a se autenticar. O serviço IAM verifica as credenciais do usuário.

  5. Se o log-in for bem-sucedido, o serviço IAM redirecionará o browser para o aplicativo Cotações do Cliente com um código de autorização.
    Observação

    Se o usuário não se autenticar, um erro será retornado em vez do código de autorização.
  6. O aplicativo Cotações do Cliente extrai o código de autorização e faz uma solicitação para um domínio de identidades para trocar o código de autorização por um token de acesso.

    Exemplo de solicitação: cliente confidencial/confiável

       curl -i 
       -H 'Authorization: Basic <base64-clientid-secret>' 
       -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>'

    Exemplo de Solicitação: Cliente Público

       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>&redirect_uri=<client-redirect-uri>&client_id=<client-id>'

    Exemplo de Solicitação Usando PKCE

       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-cod>e&redirect_uri=<client-redirect-uri>&client_id=<client-id>&code_verifier=<code-verifier>'

    Exemplo de Solicitação Usando mTLS

    Para saber como obter o secureDomainURL, consulte Tipos de Concessão de Acesso.

    curl -v \
    --cert cert.crt \
    --key key.key \
    --cacert ca.crt \
    --location '<secureDomainURL>/oauth2/v1/token' \
    --header 'Authorization: Basic <base64Encoded clientid:secret>'
    --header 'Content-Type: application/x-www-form-urlencoded' \
    --data-urlencode 'grant_type=client_credentials' \
    --data-urlencode 'client_id=<client-id>' \
    --data-urlencode 'scope=urn:opc:idm:_myscopes_'
  7. O serviço IAM valida os dados de concessão e usuário associados ao código (client_id, client_secret e o código de autorização).

  8. Um Token de Acesso e um Token de Identidade são retornados. O token de acesso contém informações sobre quais escopos o aplicativo Cotações do Cliente pode solicitar em nome do usuário. O aplicativo pode usar esse token ao solicitar APIs em nome do usuário.

    O Token de Identidade só é recuperado quando você solicita o escopo openid. Esse token contém informações de identificação sobre o usuário e é usado para autenticação federada.

  9. O aplicativo Cotações do Cliente processa o id_token e, em seguida, extrai as informações do usuário retornadas do IAM.

  10. As Cotações do Cliente exibem a home page que contém informações sobre o usuário.