

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Provedor de identidades e endpoints de terceiros confiáveis
<a name="federation-endpoints"></a>

Os *endpoints de federação* são endpoints de grupos de usuários que servem ao propósito de um dos padrões de autenticação usados pelos grupos de usuários. Eles incluem SAML ACS URLs, endpoints de descoberta OIDC e endpoints de serviço para funções de grupos de usuários, tanto como provedor de identidade quanto como parte confiável. Os endpoints da federação iniciam fluxos de autenticação, recebem comprovantes de IdPs autenticação e emitem tokens para os clientes. Eles interagem com IdPs aplicativos e administradores, mas não com usuários.

Os tópicos de página inteira após esta página têm detalhes sobre os endpoints do provedor OAuth 2.0 e OIDC que ficam disponíveis quando você adiciona um domínio ao seu grupo de usuários. O gráfico a seguir é uma lista de todos os endpoints de federação.

Exemplos de [domínios de grupos de usuários](cognito-user-pools-assign-domain.md) são:

1. Domínio de prefixo: `mydomain.auth.us-east-1.amazoncognito.com`

1. Domínio personalizado: `auth.example.com`


**Endpoints de federação do grupo de usuários**  

| URL do endpoint | Description | Como é acessado | 
| --- | --- | --- | 
| https://Your user pool domain/oauth2/authorize | Redireciona um usuário para o login gerenciado ou para fazer login com seu IdP. | Invocado no navegador do cliente para iniciar a autenticação do usuário. Consulte [Autorizar endpoint](authorization-endpoint.md). | 
| Your user pool domainhttps://oauth2/token | Retorna tokens com base em um código de autorização ou solicitação de credenciais do cliente. | Solicitado pela aplicação para recuperar tokens. Consulte [Endpoint de token](token-endpoint.md). | 
| https://Your user pool domain/oauth2/UserInfo | Retorna atributos do usuário com base nos escopos OAuth 2.0 e na identidade do usuário em um token de acesso. | Solicitado pela aplicação para recuperar o perfil do usuário. Consulte [endpoint userinfo](userinfo-endpoint.md). | 
| Your user pool domainhttps://oauth2/revoke | Revoga um token de atualização e os tokens de acesso associados. | Solicitado pela aplicação para revogar um token. Consulte [Revogar endpoint](revocation-endpoint.md). | 
| https://cognito-idp. Region.amazonaws.com/ your user pool ID /.well-known/openid-configuration | Um diretório da arquitetura OIDC do seu grupo de usuários. [1](#cognito-federation-oidc-discovery-note) | Solicitado pela aplicação para localizar metadados do emissor do grupo de usuários. | 
| https://cognito-idp. Region.amazonaws.com/ /.well-known/jwks.json your user pool ID | Chaves públicas que você pode usar para validar os tokens do Amazon Cognito. [2](#cognito-federation-oidc-jwks-note) | Solicitado pelo aplicativo para verificação JWTs. | 
| Your user pool domainhttps://oauth2/idresponse | Os provedores de identidades sociais precisam redirecionar seus usuários para esse endpoint com um código de autorização. O Amazon Cognito resgata o código para um token quando autentica seu usuário federado. | Redirecionado do login do IdP OIDC como URL de retorno de chamada do cliente IdP. | 
| Your user pool domainhttps://saml2/idresponse | O URL do Serviço do Consumidor de Declaração (ACS) para integração com provedores de identidades SAML 2.0. | Redirecionado do IdP SAML 2.0 como URL do ACS ou o ponto de origem para login iniciado pelo IdP[3](#cognito-federation-idp-init-note). | 
| Your user pool domainhttps://saml2/logout | O URL de [Logout único](cognito-user-pools-saml-idp-sign-out.md#cognito-user-pools-saml-idp-sign-out.title) (SLO) para integração com provedores de identidades SAML 2.0. | Redirecionado do IdP SAML 2.0 como URL de logout único (SLO). Aceita somente a vinculação POST. | 

1 O `openid-configuration` documento pode ser atualizado a qualquer momento com informações adicionais que mantenham o endpoint em conformidade com o OIDC e as especificações. OAuth2 

2 O arquivo JSON `jwks.json` pode ser atualizado a qualquer momento com novas chaves públicas de assinatura de token.

3 Para obter mais informações sobre o login SAML iniciado pelo IdP, consulte. [Implementar o login SAML iniciado pelo IdP](cognito-user-pools-SAML-session-initiation.md#cognito-user-pools-SAML-session-initiation-idp-initiation)

[Para obter mais informações sobre o OpenID Connect e OAuth os padrões, consulte OpenID [Connect](http://openid.net/specs/openid-connect-core-1_0.html) 1.0 e 2.0. OAuth](https://tools.ietf.org/html/rfc6749)

**Topics**
+ [O endpoint de redirecionamento e autorização](authorization-endpoint.md)
+ [O endpoint do emissor de tokens](token-endpoint.md)
+ [O endpoint de atributos do usuário](userinfo-endpoint.md)
+ [O endpoint de revogação do token](revocation-endpoint.md)
+ [O endpoint de declaração SAML do IdP](saml2-idpresponse-endpoint.md)

# O endpoint de redirecionamento e autorização
<a name="authorization-endpoint"></a>

O endpoint `/oauth2/authorize` é um endpoint de redirecionamento compatível com dois destinos de redirecionamento. Se você incluir um `identity_provider` ou `idp_identifier` no URL, ele redirecionará silenciosamente o usuário para a página de login desse provedor de identidades (IdP). Do contrário, ele redirecionará para o [Endpoint de login](login-endpoint.md) com os mesmos parâmetros de URL que você incluiu em sua solicitação. 

O endpoint de autorização redireciona para o login gerenciado ou para a página de login do IdP. O destino de uma sessão de usuário nesse endpoint é uma página da web com a qual o usuário deve interagir diretamente no navegador.

Para usar o endpoint de autorização, invoque o navegador do usuário em `/oauth2/authorize` com parâmetros que forneçam ao seu grupo de usuários os detalhes a seguir do grupo de usuários.
+ O cliente da aplicação no qual você deseja fazer login.
+ O URL de retorno de chamada ao qual você deseja chegar.
+ Os escopos OAuth 2.0 que você deseja solicitar no token de acesso do seu usuário.
+ Opcionalmente, o IdP de terceiros que você deseja usar para fazer login.

Você também pode fornecer os parâmetros `state` e `nonce` que o Amazon Cognito usa para validar as solicitações recebidas.

## GET `/oauth2/authorize`
<a name="get-authorize"></a>

O endpoint `/oauth2/authorize` só é compatível com `HTTPS GET`. Sua aplicação normalmente inicia essa solicitação no navegador do usuário. Você só pode fazer solicitações ao endpoint `/oauth2/authorize` por HTTPS.

Você pode saber mais sobre a definição de endpoint de autorização no padrão do OpenID Connect (OIDC) em [Authorization Endpoint](http://openid.net/specs/openid-connect-core-1_0.html#ImplicitAuthorizationEndpoint) (Endpoint de autorização).

### Parâmetros de solicitação
<a name="get-authorize-request-parameters"></a>

**`response_type`**  
Obrigatório.  
O tipo de resposta. Precisa ser `code` ou `token`.   
Uma solicitação bem-sucedida com um `response_type` do `code` retorna uma concessão de código de autorização. Uma concessão de código de autorização é um parâmetro `code` que o Amazon Cognito anexa ao URL de redirecionamento. Sua aplicação pode trocar o código por [Endpoint de token](token-endpoint.md) para acesso, ID e tokens de atualização. Como prática recomendada de segurança e para receber tokens de atualização para os usuários, use uma concessão de código de autorização na aplicação.  
Uma solicitação bem-sucedida com um `response_type` do `token` retorna uma concessão implícita. Uma concessão implícita é um ID e um token de acesso que o Amazon Cognito anexa ao URL de redirecionamento. A concessão implícita é menos segura porque expõe tokens e possíveis informações de identificação aos usuários. Você pode desativar o suporte para concessões implícitas na configuração do cliente da aplicação.

**`client_id`**  
Obrigatório.  
O ID do cliente do aplicativo  
O valor de `client_id` deve ser o ID de um cliente da aplicação no grupo de usuários em que você faz a solicitação. O cliente da aplicação deve ser compatível com o login de usuários locais do Amazon Cognito ou pelo menos um IdP de terceiros.

**`redirect_uri`**  
Obrigatório.  
O URL para o qual o servidor de autenticação redireciona o navegador depois que o Amazon Cognito autoriza o usuário.  
Um identificador de recurso uniforme (URI) de redirecionamento deve ter os seguintes atributos:  
+ Deve ser um URI absoluto.
+ É necessário pré-registrar o URI em um cliente.
+ Não pode incluir um componente de fragmento.
Consulte [OAuth 2.0 - Endpoint de redirecionamento](https://tools.ietf.org/html/rfc6749#section-3.1.2).  
O Amazon Cognito exige que seu URI de redirecionamento use HTTPS, exceto para `http://localhost`, que você pode definir como um URL de retorno de chamada para fins de teste.  
O Amazon Cognito também oferece suporte ao retorno de chamadas URLs de aplicativos, como. `myapp://example`

**`state`**  
Opcional, recomendado.  
Quando sua aplicação adiciona um parâmetro *state* a uma solicitação, o Amazon Cognito retorna o valor para a aplicação quando o endpoint `/oauth2/authorize` redireciona o usuário.  
Adicione esse valor às suas solicitações para se proteger contra ataques [CSRF](https://en.wikipedia.org/wiki/Cross-site_request_forgery).  
Não é possível definir o valor de um parâmetro `state` como uma string JSON codificada por URL. Para transmitir uma string que corresponda a esse formato em um parâmetro `state`, codifique-a como Base64 e, depois, decodifique-a em sua aplicação.

**`identity_provider`**  
Opcional.  
Adicione esse parâmetro para ignorar o login gerenciado e redirecionar seu usuário para uma página de login do provedor. O valor do parâmetro *identity\$1provider* é o nome do provedor de identidade (IdP) da forma como ele aparece no grupo de usuários.  
+ Para provedores sociais, você pode usar os valores *identity\$1provider*`Facebook`, `Google` e `LoginWithAmazon` e `SignInWithApple`.
+ Para grupos de usuários do Amazon Cognito, use o valor `COGNITO`.
+ Para provedores de identidade SAML 2.0 e OpenID Connect (OIDC) (IdPs), use o nome que você atribuiu ao IdP em seu grupo de usuários.

**`idp_identifier`**  
Opcional.  
Adicione esse parâmetro para redirecionar para um provedor com um nome alternativo para o nome de *identity\$1provider*. Você pode inserir identificadores para seu SAML 2.0 e OIDC no menu de **provedores sociais e externos IdPs ** do console do Amazon Cognito.

**`scope`**  
Opcional.  
Pode ser uma combinação de quaisquer escopos reservados ao sistema ou de escopos personalizados associados a um cliente. Os escopos devem ser separados por espaços. Os escopos reservados ao sistema são `openid`, `email`, `phone`, `profile` e `aws.cognito.signin.user.admin`. Qualquer escopo usado deve ser associado ao cliente ou ele será ignorado durante o tempo de execução.  
Se o cliente não solicita qualquer escopo, o servidor de autenticação usa todos os escopos associados ao cliente.  
Um token de ID só é retornado se o escopo `openid` é solicitado. O token de acesso só pode ser usado com relação a grupos de usuários do Amazon Cognito se o escopo `aws.cognito.signin.user.admin` é solicitado. Os escopos `phone`, `email` e `profile` só podem ser solicitados se o escopo `openid` também é solicitado. Esses escopos ditam as solicitações que entram no token de ID.

**`code_challenge_method`**  
Opcional.  
O protocolo de hash que você usa para gerar o desafio. O [PKCE RFC](https://tools.ietf.org/html/rfc7636) define dois métodos, S256 e simples; no entanto, o servidor de autenticação do Amazon Cognito só é compatível com o S256.

**`code_challenge`**  
Opcional.  
O desafio da chave de prova para troca de código (PKCE) que você gerou por meio de `code_verifier`. Para obter mais informações, consulte [Como usar PKCE em concessões de código de autorização](using-pkce-in-authorization-code.md).  
Obrigatório somente quando você especifica um parâmetro `code_challenge_method`.

**`nonce`**  
Opcional.  
Um valor aleatório que você pode adicionar à solicitação. O valor nonce fornecido está incluído no token de ID que o Amazon Cognito emite. Para se proteger contra ataques de repetição, a aplicação pode inspecionar a reivindicação `nonce` no token de ID e compará-la com o que você gerou. Para obter mais informações sobre a solicitação `nonce`, consulte “[ID Token Validation](https://openid.net/specs/openid-connect-core-1_0.html#IDTokenValidation)” (Validação de tokens de ID) no *OpenID Connect Standard* (Padrão do OpenID Connect).

**`lang`**  
Opcional.  
O idioma no qual você deseja exibir as páginas interativas. As páginas de login gerenciado podem ser localizadas, mas as páginas de IU hospedada (clássica) não. Para obter mais informações, consulte [Managed login localization](cognito-user-pools-managed-login.md#managed-login-localization).

**`login_hint`**  
Opcional.  
Um prompt de nome de usuário que você deseja enviar ao servidor de autorização. Você pode coletar um nome de usuário, endereço de e-mail ou número de telefone do seu usuário e permitir que o provedor de destino preencha previamente o nome de login do usuário. Quando você envia um parâmetro `login_hint` e nenhum parâmetro `idp_identifier` ou `identity_provider` para o endpoint `oauth2/authorize`, o login gerenciado preenche o campo do nome de usuário com o valor da dica. Você também pode passar esse parâmetro para o [Endpoint de login](login-endpoint.md) e preencher automaticamente o valor do nome de usuário.  
Quando sua solicitação de autorização invoca um redirecionamento para o OIDC, o IdPs Amazon Cognito adiciona `login_hint` um parâmetro à solicitação para esse autorizador terceirizado. Você não pode encaminhar dicas de login para SAML, Apple, Login With Amazon, Google ou Facebook (Meta). IdPs

**`prompt`**  
Opcional.  
Um parâmetro OIDC que controla o comportamento de autenticação para sessões existentes. Disponível somente na versão de identidade visual de login gerenciado, não na IU hospedada clássica. Para obter mais informações da especificação do OIDC, consulte [Authentication request](https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest). Os valores `none` e `login` têm um efeito no comportamento de autenticação do grupo de usuários.  
O Amazon Cognito encaminha todos os valores de, `prompt` exceto `none` para o seu, IdPs quando os usuários selecionam a autenticação com provedores terceirizados. Isso ocorre quando o URL que os usuários acessam inclui um parâmetro `identity_provider` ou `idp_identifier`, ou quando o servidor de autorização os redireciona para o [Endpoint de login](login-endpoint.md) e eles selecionam um IdP nos botões disponíveis.  
**Valores de parâmetros de prompt**    
`prompt=none`  
O Amazon Cognito continua silenciosamente a autenticação para usuários que têm uma sessão autenticada válida. Com esse prompt, os usuários podem se autenticar silenciosamente entre diferentes clientes da aplicação no grupo de usuários. Se o usuário ainda não estiver autenticado, o servidor de autorização retornará um erro `login_required`.  
`prompt=login`  
O Amazon Cognito exige que os usuários se autentiquem novamente, mesmo que já tenham uma sessão ativa. Envie esse valor quando quiser verificar a identidade do usuário novamente. Usuários autenticados que tenham uma sessão existente podem retornar ao login sem invalidar essa sessão. Quando um usuário com uma sessão ativa faz login novamente, o Amazon Cognito atribui a ele um novo cookie de sessão. Esse parâmetro também pode ser encaminhado para o seu IdPs. IdPsque aceitam esse parâmetro também solicitam uma nova tentativa de autenticação do usuário.  
`prompt=select_account`  
Esse valor não tem efeito no login local e deve ser enviado em solicitações que redirecionam para o. IdPs Quando incluído na solicitação de autorização, esse parâmetro adiciona `prompt=select_account` ao caminho do URL para o destino de redirecionamento do IdP. Quando IdPs oferecem suporte a esse parâmetro, eles solicitam que os usuários selecionem a conta com a qual desejam fazer login.  
`prompt=consent`  
Esse valor não tem efeito no login local e deve ser enviado em solicitações que redirecionam para o. IdPs Quando incluído na solicitação de autorização, esse parâmetro adiciona `prompt=consent` ao caminho do URL para o destino de redirecionamento do IdP. Quando IdPs oferecem suporte a esse parâmetro, eles solicitam o consentimento do usuário antes de serem redirecionados de volta para seu grupo de usuários. 
Quando você omite o parâmetro `prompt` da solicitação, o login gerenciado segue o comportamento padrão: os usuários devem fazer login, a menos que o navegador tenha um cookie de sessão de login gerenciado válido. Você pode combinar vários valores para `prompt` com um delimitador de espaço, por exemplo, `prompt=login consent`.

**`resource`**  
Opcional.  
O identificador de um recurso que você deseja vincular ao token de acesso na declaração `aud`. Quando você inclui esse parâmetro, o Amazon Cognito valida se o valor é um URL e define o público do token de acesso resultante para o recurso solicitado. Você pode solicitar um [servidor de recursos](cognito-user-pools-define-resource-servers.md) do grupo de usuários com um identificador em formato de URL ou um URL de sua escolha. Os valores desse parâmetro devem começar com`https://`, `http://localhost` ou com um esquema de URL personalizado, como `myapp://`.  
A vinculação de recursos é definida no [RFC 8707](https://www.rfc-editor.org/rfc/rfc8707.html). Para obter mais informações sobre servidores de recursos e vinculação de recursos, consulte [Vinculação de recursos](cognito-user-pools-define-resource-servers.md#cognito-user-pools-resource-binding).

## Exemplo: concessão de código de autorização
<a name="sample-authorization-code-grant"></a>

Este é um exemplo de solicitação de concessão de código de autorização.

A solicitação a seguir inicia uma sessão para recuperar um código de autorização que seu usuário passa para a aplicação de destino `redirect_uri`. Essa sessão solicita escopos para atributos de usuário e acesso às operações da API de autoatendimento do Amazon Cognito.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=openid+profile+aws.cognito.signin.user.admin
```

O servidor de autenticação do Amazon Cognito faz o redirecionamento de volta à aplicação com o estado e o código de autorização. O código de autorização é válido por cinco minutos.

```
HTTP/1.1 302 Found
Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&state=abcdefg
```

## Exemplo: concessão de código de autorização com PKCE
<a name="sample-authorization-code-grant-with-pkce"></a>

Este fluxo de exemplo realiza uma concessão de código de autorização com [PKCE](using-pkce-in-authorization-code.md#using-pkce-in-authorization-code.title).

Esta solicitação adiciona um parâmetro `code_challenge`. Para concluir a troca de um código por um token, você deve incluir o parâmetro `code_verifier` em sua solicitação para o endpoint `/oauth2/token`.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=aws.cognito.signin.user.admin&
code_challenge_method=S256&
code_challenge=a1b2c3d4...
```

O servidor de autorização redireciona de volta à aplicação com o estado e o código de autorização. Sua aplicação processa o código de autorização e o troca por tokens.

```
HTTP/1.1 302 Found
Location: https://www.example.com?code=a1b2c3d4-5678-90ab-cdef-EXAMPLE11111&state=abcdefg
```

## Exemplo: exigência de reautenticação com `prompt=login`
<a name="sample-authorization-code-with-prompt-login"></a>

A solicitação a seguir adiciona um parâmetro `prompt=login` que exige que o usuário se autentique novamente, mesmo que tenha uma sessão ativa.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=openid+profile+aws.cognito.signin.user.admin&
prompt=login
```

O servidor de autorização redireciona para o [endpoint de login](login-endpoint.md), exigindo uma nova autenticação.

```
HTTP/1.1 302 Found Location: https://mydomain.auth.us-east-1.amazoncognito.com/login?response_type=code&client_id=1example23456789&redirect_uri=https://www.example.com&state=abcdefg&scope=openid+profile+aws.cognito.signin.user.admin&prompt=login
```

## Exemplo: autenticação silenciosa com `prompt=none`
<a name="sample-authorization-code-with-prompt-none"></a>

A solicitação a seguir adiciona um parâmetro `prompt=none` que verifica silenciosamente se o usuário tem uma sessão válida.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=openid+profile+aws.cognito.signin.user.admin&
prompt=none
```

Quando não há uma sessão válida, o servidor de autorização retorna um erro ao URI de redirecionamento.

```
HTTP/1.1 302 Found Location: https://www.example.com?error=login_required&state=abcdefg
```

Quando há uma sessão válida, o servidor de autorização retorna um código de autorização.

```
HTTP/1.1 302 Found Location: https://www.example.com?code=AUTHORIZATION_CODE&state=abcdefg
```

## Exemplo: concessão de código de autorização com vinculação de recursos
<a name="sample-authorization-code-with-resource-binding"></a>

A solicitação a seguir adiciona um parâmetro `resource` para vincular o token de acesso a um servidor de recursos específico. O token de acesso resultante cria as condições para que a API de destino valide que é o público-alvo da solicitação do usuário autenticado.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=code&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=solar-system-data-api.example.com/asteroids.add&
resource=https://solar-system-data-api.example.com
```

O servidor de autorização retorna um código de autorização que resulta em um token de acesso com uma declaração `aud` de `https://solar-system-data-api.example.com`.

```
HTTP/1.1 302 Found Location: https://www.example.com?code=AUTHORIZATION_CODE&state=abcdefg
```

## Exemplo: concessão de token (implícita) sem escopo `openid`
<a name="sample-token-grant-without-openid-scope"></a>

Esse exemplo de fluxo gera uma concessão implícita e retorna JWTs diretamente para a sessão do usuário.

A solicitação é para uma concessão implícita do seu servidor de autorização. Ela solicita escopos no token de acesso que autorizam as operações de autoatendimento do perfil do usuário.

```
GET https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize?
response_type=token&
client_id=1example23456789&
redirect_uri=https://www.example.com&
state=abcdefg&
scope=aws.cognito.signin.user.admin
```

O servidor de autorização redireciona de volta à aplicação somente com um token de acesso. Como o escopo `openid` não foi solicitado, o Amazon Cognito não retorna um token de ID. Além disso, o Amazon Cognito não retorna um token de atualização nesse fluxo.

```
HTTP/1.1 302 Found
Location: https://example.com/callback#access_token=eyJra456defEXAMPLE&token_type=bearer&expires_in=3600&state=STATE
```

## Exemplo: concessão de token (implícita) com escopo `openid`
<a name="sample-token-grant-with-openid-scope"></a>

Este fluxo de exemplo gera uma concessão implícita e retorna tokens para o navegador do usuário.

A solicitação é para uma concessão implícita do seu servidor de autorização. Ela solicita escopos no token de acesso que autorizam o acesso a atributos do usuário e operações de autoatendimento.

```
GET
https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/authorize? 
response_type=token& 
client_id=1example23456789& 
redirect_uri=https://www.example.com& 
state=abcdefg&
scope=aws.cognito.signin.user.admin+openid+profile
```

O servidor de autorização redireciona de volta à aplicação com token de acesso e token de ID (porque o escopo `openid` foi incluído):

```
HTTP/1.1 302 Found
Location: https://www.example.com#id_token=eyJra67890EXAMPLE&access_token=eyJra12345EXAMPLE&token_type=bearer&expires_in=3600&state=abcdefg
```

## Exemplos de respostas negativas
<a name="get-authorize-negative"></a>

O Amazon Cognito pode negar sua solicitação. As solicitações negativas vêm com um código de erro HTTP e uma descrição que você pode usar para corrigir os parâmetros da solicitação. Veja a seguir exemplos de respostas negativas.
+ Se `client_id` e `redirect_uri` forem válidos, mas os parâmetros da solicitação não estiverem formatados corretamente, o servidor de autenticação redirecionará o erro para o `redirect_uri` do cliente e anexará uma mensagem de erro em um parâmetro de URL. Veja a seguir exemplos de formatos incorretos.
  + A solicitação não inclui um parâmetro `response_type`.
  + A solicitação de autorização forneceu um parâmetro `code_challenge`, mas não um parâmetro `code_challenge_method`.
  + O valor do parâmetro `code_challenge_method` não é `S256`.

  Veja a seguir um exemplo de resposta para a solicitação com formato incorreto.

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request
  ```
+ Se o cliente solicitar `code` ou `token` em `response_type`, mas não tiver permissão para essas solicitações, o servidor de autorização do Amazon Cognito retornará `unauthorized_client` ao `redirect_uri` do cliente da seguinte forma:

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=unauthorized_client
  ```
+  Se o cliente solicitar um escopo inválido, desconhecido ou malformado, o servidor de autorização do Amazon Cognito deverá retornar o `invalid_scope` ao `redirect_uri` do cliente da seguinte forma: 

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_scope
  ```
+ Se acontece um erro inesperado no servidor, o servidor de autenticação retorna `server_error` ao `redirect_uri` do cliente. Como o erro HTTP 500 não é enviado ao cliente, ele não aparece no navegador do usuário. O servidor de autorização retorna o erro a seguir.

  ```
  HTTP 1.1 302 Found Location: https://client_redirect_uri?error=server_error
  ```
+ Quando o Amazon Cognito se autentica por meio de federação para terceiros, IdPs o Amazon Cognito pode enfrentar problemas de conexão, como os seguintes:
  + Se ocorrer um tempo limite de conexão ao solicitar o token do IdP, o servidor de autenticação redirecionará o erro para o `redirect_uri` do cliente da seguinte maneira:

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Timeout+occurred+in+calling+IdP+token+endpoint
    ```
  + Se ocorrer um tempo limite de conexão na chamada do endpoint `jwks_uri` para validação do token de ID, o servidor de autenticação redirecionará o erro para o `redirect_uri` do cliente da seguinte maneira:

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=error_description=Timeout+in+calling+jwks+uri
    ```
+ Ao se autenticar por meio de federação com terceiros IdPs, os provedores podem retornar respostas de erro. Isso pode acontecer em razão de erros de configuração ou outros motivos, como os seguintes:
  + Se uma resposta de erro for recebida de outros provedores, o servidor de autenticação redirecionará o erro para o `redirect_uri` do cliente da seguinte maneira:

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=[IdP name]+Error+-+[status code]+error getting token
    ```
  + Se uma resposta de erro for recebida do Google, o servidor de autenticação redirecionará o erro para o `redirect_uri` do cliente da seguinte maneira: 

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Google+Error+-+[status code]+[Google-provided error code]
    ```
+ Quando o Amazon Cognito encontra uma exceção de comunicação com um IdP externo, o servidor de autenticação redireciona o erro para o `redirect_uri` do cliente com uma das seguintes mensagens:
  + 

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Connection+reset
    ```
  + 

    ```
    HTTP 1.1 302 Found Location: https://client_redirect_uri?error=invalid_request&error_description=Read+timed+out
    ```

# O endpoint do emissor de tokens
<a name="token-endpoint"></a>

O [endpoint do token OAuth ](https://www.rfc-editor.org/rfc/rfc6749#section-3.2) 2.0 `/oauth2/token` emite tokens web JSON (JWTs) para aplicativos que desejam concluir fluxos de concessão de código de autorização e credenciais de cliente. Esses tokens são o resultado da autenticação com um grupo de usuários. Eles contêm informações sobre o usuário (token de ID), o nível de acesso do usuário (token de acesso) e o direito do usuário de persistir na sessão conectada (token de atualização). As bibliotecas independentes do OpenID Connect (OIDC) gerenciam cargas úteis de solicitações e respostas desse endpoint. Os tokens fornecem prova verificável de autenticação, informações de perfil e um mecanismo para acesso a sistemas de backend.

Seu servidor de autorização do grupo de usuários OAuth 2.0 emite tokens web JSON (JWTs) do endpoint do token para os seguintes tipos de sessões:

1. Usuários que concluíram uma solicitação de concessão de código de autorização. O resgate bem-sucedido de um código retorna tokens de ID, acesso e atualização.

1. Machine-to-machine Sessões (M2M) que concluíram uma concessão de credenciais de cliente. A autorização bem-sucedida com o segredo do cliente retorna um token de acesso.

1. Usuários que já fizeram login e receberam tokens de atualização. A autenticação de token de atualização retorna novos tokens de ID e acesso.
**nota**  
Os usuários que fazem login com uma concessão de código de autorização no login gerenciado ou por meio da federação sempre podem atualizar seus tokens por meio do endpoint de token. Usuários que fazem login com as operações da API `InitiateAuth` e `AdminInitiateAuth` podem atualizar seus tokens com o endpoint do token quando os [dispositivos memorizados](amazon-cognito-user-pools-device-tracking.md) *não* estão ativos em seu grupo de usuários. Se os dispositivos memorizados estiverem ativos, atualize os tokens com a [API relevante ou a operação de atualização de token do SDK](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-api) para seu cliente de aplicação.

O endpoint do token fica disponível ao público quando você adiciona um domínio ao grupo de usuários. Ele aceita solicitações HTTP POST. Para fins de segurança da aplicação, use o PKCE com eventos de login com código de autorização. O PKCE verifica se o usuário que está transmitindo um código de autorização é o mesmo usuário que se autenticou. Para obter mais informações sobre PKCE, consulte [IETF RFC 7636](https://datatracker.ietf.org/doc/html/rfc7636).

Você pode aprender mais sobre os clientes do aplicativo do grupo de usuários e seus tipos de concessão, segredos do cliente, escopos permitidos e clientes IDs em[Configurações específicas da aplicação com clientes de aplicação](user-pool-settings-client-apps.md). Você pode aprender mais sobre autorização M2M, concessões de credenciais de clientes e autorização com escopos de token de acesso em [Escopos, M2M e servidores de recursos](cognito-user-pools-define-resource-servers.md).

Para recuperar informações sobre um usuário por meio do token de acesso, transmita-o para [endpoint userinfo](userinfo-endpoint.md) ou para uma solicitação de API [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_GetUser.html). O token de acesso deve conter os escopos apropriados para essas solicitações.

## Formatar uma solicitação POST para o endpoint de token
<a name="post-token"></a>

O endpoint `/oauth2/token` só é compatível com `HTTPS POST`. Esse endpoint não é interativo com o usuário. Gerencie solicitações de token com uma [biblioteca OpenID Connect (OIDC)](https://openid.net/developers/certified-openid-connect-implementations/) em sua aplicação.

O endpoint de token é compatível com a autenticação de `client_secret_basic` e `client_secret_post`. Para obter mais informações sobre a especificação do OIDC, consulte [Client Authentication](https://openid.net/specs/openid-connect-core-1_0.html#ClientAuthentication). Para obter mais informações sobre o endpoint de token na especificação do OpenID Connect, consulte [Endpoint de token](http://openid.net/specs/openid-connect-core-1_0.html#TokenEndpoint).

### Parâmetros de solicitação no cabeçalho
<a name="post-token-request-parameters"></a>

Você pode transmitir os parâmetros a seguir no cabeçalho da sua solicitação para o endpoint de token.

**`Authorization`**  
Se um segredo foi emitido para o cliente, ele precisa passar o `client_id` e o `client_secret` no cabeçalho de autorização como autorização HTTP `client_secret_basic`. Você também pode incluir o `client_id` e `client_secret` no corpo da solicitação como autorização de `client_secret_post`.  
A string do cabeçalho de autorização é [Basic](https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side) `Base64Encode(client_id:client_secret)`. O exemplo a seguir é um cabeçalho de autorização para o cliente da aplicação `djc98u3jiedmi283eu928` com segredo do cliente `abcdef01234567890` usando a versão codificada em Base64 da string `djc98u3jiedmi283eu928:abcdef01234567890`:  

```
Authorization: Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw
```

**`Content-Type`**  
Defina o valor desse parâmetro como `'application/x-www-form-urlencoded'`.

### Parâmetros de solicitação no corpo
<a name="post-token-request-parameters-in-body"></a>

A seguir estão os parâmetros que você pode solicitar em formato `x-www-form-urlencoded` no corpo da solicitação para o endpoint de token.

**`grant_type`**  
*Obrigatório*.  
O tipo de concessão do OIDC que você deseja solicitar.  
Deve ser `authorization_code` ou `refresh_token` ou `client_credentials`. Você pode solicitar um token de acesso para um escopo personalizado a partir do endpoint do token sob as seguintes condições:  
+ Você habilitou o escopo solicitado na configuração do cliente da aplicação.
+ Você configurou o cliente da aplicação com um segredo do cliente.
+ Você ativa a concessão de credenciais do cliente em seu cliente de aplicação.
O endpoint de token retorna um token de atualização somente quando o `grant_type` é `authorization_code`.

**`client_id`**  
*Opcional. Não é obrigatório quando você fornece o ID do cliente de aplicação no cabeçalho `Authorization`.*  
O ID de um cliente de aplicação no grupo de usuários. Especifique o mesmo cliente de aplicação que autenticou o usuário.  
Você deve fornecer esse parâmetro se o cliente for público e não tiver um segredo ou com `client_secret` na autorização `client_secret_post`.

**`client_secret`**  
*Opcional. Não é obrigatório quando você fornece o segredo do cliente no cabeçalho `Authorization` e quando o cliente de aplicação não tem um segredo.*  
O segredo do cliente de aplicação, caso o cliente de aplicação tenha um, para autorização `client_secret_post`.

**`scope`**  
*Opcional.*  
Pode ser uma combinação de quaisquer escopos associados ao seu cliente de aplicação. O Amazon Cognito ignora escopos na solicitação que não são permitidos para o cliente de aplicação solicitado. Se você não fornecer esse parâmetro de solicitação, o servidor de autorização retornará uma declaração `scope` de token de acesso com todos os escopos de autorização que você habilitou na configuração do cliente de aplicação. É possível solicitar qualquer um dos escopos permitidos para o cliente de aplicação solicitado: escopos padrão, escopos personalizados de servidores de recursos e o escopo de autoatendimento do usuário `aws.cognito.signin.user.admin`.

**`redirect_uri`**  
*Opcional. Não é obrigatório para concessões de credenciais de clientes.*  
Precisa ser o mesmo `redirect_uri` usado para obter o `authorization_code` em `/oauth2/authorize`.  
Você deve fornecer esse parâmetro se `grant_type` for `authorization_code`.

**`refresh_token`**  
*Opcional. Usado somente quando o usuário já tem um token de atualização e deseja obter um novo ID e tokens de acesso.*  
Para gerar novos tokens de acesso e ID para a sessão de um usuário, defina o valor de `refresh_token` para um token de atualização válido emitido pelo cliente de aplicação solicitado.  
Retorna um novo token de atualização com um novo token de ID e acesso quando a [alternância de tokens de atualização](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-rotation) está ativa, caso contrário, retorna somente tokens de ID e acesso. Se o token de acesso original estiver [vinculado a um recurso da API](cognito-user-pools-define-resource-servers.md#cognito-user-pools-resource-binding), o novo token de acesso manterá o URL da API solicitado na declaração `aud`.

**`code`**  
*Opcional. Obrigatório somente em concessões de código de autorização.*  
O código de autorização de uma concessão de código de autorização. Você deve fornecer esse parâmetro se sua solicitação de autorização incluir `grant_type` de `authorization_code`.

**`aws_client_metadata`**  
*Opcional.*  
Informações que você deseja passar para os fluxos de autorização [Acionador do Lambda antes da geração do token](user-pool-lambda-pre-token-generation.md) in [machine-to-machine (M2M)](cognito-user-pools-define-resource-servers.md). Sua aplicação pode coletar informações de contexto sobre a sessão e transmiti-las neste parâmetro. Quando você transmite `aws_client_metadata` no formato JSON codificado por URL, o Amazon Cognito o inclui no evento de entrada para sua função do Lambda do acionador. Sua versão do evento de acionador de pré-geração de tokens ou a versão global de acionador do Lambda deve ser configurada para a versão três ou posterior. Embora o Amazon Cognito aceite solicitações para este endpoint em fluxos M2M de código de autorização e credenciais do cliente, seu grupo de usuários só transmite `aws_client_metadata` para o acionador de pré-geração de tokens por meio de solicitações de credenciais do cliente.

**`code_verifier`**  
Opcional. Obrigatório somente se você tiver fornecido os parâmetros `code_challenge_method` e `code_challenge` em sua solicitação de autorização inicial.  
O verificador de código gerado que sua aplicação usou para calcular `code_challenge` em uma solicitação de concessão de código de autorização com [PKCE](using-pkce-in-authorization-code.md).

## Como trocar um código de autorização por tokens
<a name="post-token-positive-exchanging-authorization-code-for-tokens"></a>

A solicitação a seguir gera tokens de ID, acesso e atualização com sucesso após a autenticação com uma concessão de código de autorização. A solicitação transmite o segredo do cliente no formato `client_secret_basic` no cabeçalho `Authorization`.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token&
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=authorization_code&
client_id=1example23456789&
code=AUTHORIZATION_CODE&
redirect_uri=com.myclientapp://myclient/redirect
```

A resposta emite novos tokens de ID, acesso e atualização para o usuário, com metadados adicionais.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "refresh_token": "eyJj3example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Credenciais do cliente com autorização básica
<a name="exchanging-client-credentials-for-an-access-token-in-request-body"></a>

A solicitação a seguir de uma aplicação M2M solicita a concessão de credenciais do cliente. Como as credenciais do cliente exigem um segredo do cliente, a solicitação é autorizada com um cabeçalho `Authorization` derivado do ID e do segredo do cliente de aplicação. A solicitação resulta em um token de acesso com os dois escopos solicitados. A solicitação também inclui metadados do cliente que fornecem informações de endereço IP e um token emitido para o usuário atribuído a essa concessão. O Amazon Cognito transmite os metadados do cliente para o acionador do Lambda de pré-geração de tokens.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=client_credentials&
client_id=1example23456789&
scope=resourceServerIdentifier1%2Fscope1%20resourceServerIdentifier2%2Fscope2&
&aws_client_metadata=%7B%22onBehalfOfToken%22%3A%22eyJra789ghiEXAMPLE%22,%20%22ClientIpAddress%22%3A%22192.0.2.252%22%7D
```

O Amazon Cognito transmite o evento de entrada a seguir para o acionador do Lambda de pré-geração de tokens.

```
{
    version: '3',
    triggerSource: 'TokenGeneration_ClientCredentials',
    region: 'us-east-1',
    userPoolId: 'us-east-1_EXAMPLE',
    userName: 'ClientCredentials',
    callerContext: {
        awsSdkVersion: 'aws-sdk-unknown-unknown',
        clientId: '1example23456789'
    },
    request: {
        userAttributes: {},
        groupConfiguration: null,
        scopes: [
           'resourceServerIdentifier1/scope1',
           'resourceServerIdentifier2/scope2'
        ],
        clientMetadata: {
            'onBehalfOfToken': 'eyJra789ghiEXAMPLE',
            'ClientIpAddress': '192.0.2.252'
        }
    },
    response: { claimsAndScopeOverrideDetails: null }
}
```

A resposta retorna um token de acesso. As concessões de credenciais do cliente são para autorização machine-to-machine (M2M) e retornam apenas tokens de acesso.

```
HTTP/1.1 200 OK
Content-Type: application/json
{
    "access_token": "eyJra1example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Credenciais do cliente com autorização do corpo POST
<a name="post-token-positive-exchanging-client-credentials-for-an-access-token-in-request-body"></a>

A solicitação de concessão de credenciais do cliente a seguir inclui o parâmetro `client_secret` no corpo da solicitação e não inclui um cabeçalho `Authorization`. Essa solicitação usa a sintaxe de autorização `client_secret_post`. A solicitação resulta em um token de acesso com o escopo solicitado. A solicitação também inclui metadados do cliente que fornecem informações de endereço IP e um token emitido para o usuário atribuído a essa concessão. O Amazon Cognito transmite os metadados do cliente para o acionador do Lambda de pré-geração de tokens.

```
POST /oauth2/token HTTP/1.1
Content-Type: application/x-www-form-urlencoded
X-Amz-Target: AWSCognitoIdentityProviderService.Client credentials request
User-Agent: USER_AGENT
Accept: /
Accept-Encoding: gzip, deflate, br
Content-Length: 177
Referer: http://auth.example.com/oauth2/token
Host: auth.example.com
Connection: keep-alive

grant_type=client_credentials&
client_id=1example23456789&
scope=my_resource_server_identifier%2Fmy_custom_scope&
client_secret=9example87654321&
aws_client_metadata=%7B%22onBehalfOfToken%22%3A%22eyJra789ghiEXAMPLE%22,%20%22ClientIpAddress%22%3A%22192.0.2.252%22%7D
```

O Amazon Cognito transmite o evento de entrada a seguir para o acionador do Lambda de pré-geração de tokens.

```
{
    version: '3',
    triggerSource: 'TokenGeneration_ClientCredentials',
    region: 'us-east-1',
    userPoolId: 'us-east-1_EXAMPLE',
    userName: 'ClientCredentials',
    callerContext: {
        awsSdkVersion: 'aws-sdk-unknown-unknown',
        clientId: '1example23456789'
    },
    request: {
        userAttributes: {},
        groupConfiguration: null,
        scopes: [
           'resourceServerIdentifier1/my_custom_scope'
        ],
        clientMetadata: {
            'onBehalfOfToken': 'eyJra789ghiEXAMPLE',
            'ClientIpAddress': '192.0.2.252'
        }
    },
    response: { claimsAndScopeOverrideDetails: null }
}
```

A resposta retorna um token de acesso. As concessões de credenciais do cliente são para autorização machine-to-machine (M2M) e retornam apenas tokens de acesso.

```
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Date: Tue, 05 Dec 2023 16:11:11 GMT
x-amz-cognito-request-id: 829f4fe2-a1ee-476e-b834-5cd85c03373b

{
    "access_token": "eyJra12345EXAMPLE",
    "expires_in": 3600,
    "token_type": "Bearer"
}
```

## Concessão de código de autorização com PKCE
<a name="post-token-positive-exchanging-authorization-code-grant-with-pkce-for-tokens"></a>

O exemplo a seguir conclui uma solicitação de autorização que incluiu os parâmetros `code_challenge_method` e `code_challenge` em uma solicitação de concessão de código de autorização com [PKCE](using-pkce-in-authorization-code.md).

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=authorization_code&
client_id=1example23456789&
code=AUTHORIZATION_CODE&
code_verifier=CODE_VERIFIER&
redirect_uri=com.myclientapp://myclient/redirect
```

A resposta retorna tokens de ID, acesso e atualização da verificação bem-sucedida do PKCE pela aplicação.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "refresh_token": "eyJj3example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Atualização de token sem alternância de tokens de atualização
<a name="post-token-positive-exchanging-a-refresh-token-for-tokens"></a>

O exemplo de solicitações a seguir fornece um token de atualização para um cliente de aplicação no qual a [alternância de tokens de atualização](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-rotation) está inativa. Como o cliente de aplicação tem um segredo do cliente, a solicitação fornece um cabeçalho `Authorization`.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=refresh_token&
client_id=1example23456789&
refresh_token=eyJj3example
```

A resposta retorna novos tokens de ID e acesso.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Atualização de token com alternância de tokens de atualização
<a name="post-token-positive-refresh-token-rotation"></a>

O exemplo de solicitações a seguir fornece um token de atualização para um cliente de aplicação no qual a [alternância de tokens de atualização](amazon-cognito-user-pools-using-the-refresh-token.md#using-the-refresh-token-rotation) está ativa. Como o cliente de aplicação tem um segredo do cliente, a solicitação fornece um cabeçalho `Authorization`.

```
POST https://mydomain.auth.us-east-1.amazoncognito.com/oauth2/token >
Content-Type='application/x-www-form-urlencoded'&
Authorization=Basic ZGpjOTh1M2ppZWRtaTI4M2V1OTI4OmFiY2RlZjAxMjM0NTY3ODkw

grant_type=refresh_token&
client_id=1example23456789&
refresh_token=eyJj3example
```

A resposta retorna novos tokens de ID, acesso e atualização.

```
HTTP/1.1 200 OK
Content-Type: application/json

{
    "access_token": "eyJra1example",
    "id_token": "eyJra2example",
    "refresh_token": "eyJj4example",
    "token_type": "Bearer",
    "expires_in": 3600
}
```

## Exemplos de respostas negativas
<a name="post-token-negative"></a>

Solicitações malformadas geram erros no endpoint de token. Veja a seguir um mapa geral do corpo da resposta quando as solicitações de token geram um erro.

```
HTTP/1.1 400 Bad Request
Content-Type: application/json;charset=UTF-8

{
"error":"invalid_request|invalid_client|invalid_grant|unauthorized_client|unsupported_grant_type"
}
```

**`invalid_request`**  
A solicitação não tem um parâmetro obrigatório, inclui um valor de parâmetro não compatível (diferente de `unsupported_grant_type`) ou está malformado. Por exemplo, `grant_type` é `refresh_token` , mas `refresh_token` não está incluído. 

**`invalid_client`**  
Falha na autenticação do cliente. Por exemplo, quando o cliente inclui `client_id` e `client_secret` no cabeçalho de autorização, mas não há tal cliente com esse `client_id` e `client_secret`. 

**`invalid_grant`**  
O token de atualização foi revogado.   
O código de autorização já foi consumido ou não existe.   
O cliente da aplicação não tem acesso de leitura a todos os [atributos](https://docs.aws.amazon.com/cognito/latest/developerguide/user-pool-settings-attributes.html) no escopo solicitado. Por exemplo, a aplicação solicita o escopo `email` e o cliente da aplicação consegue ler o atributo `email`, mas não `email_verified`.

**`unauthorized_client`**  
O cliente não tem permissão para fluxo de concessão de código ou para tokens de atualização. 

**`unsupported_grant_type`**  
Retornado se `grant_type` for diferente de `authorization_code`, `refresh_token` ou `client_credentials`. 

# O endpoint de atributos do usuário
<a name="userinfo-endpoint"></a>

Quando o OIDC emite tokens de ID que contêm atributos do usuário, o OAuth 2.0 implementa o endpoint. `/oauth2/userInfo` Um usuário ou cliente autenticado recebe um token de acesso com uma reivindicação `scopes`. Essa reivindicação determina os atributos que o servidor de autorização deve retornar. Quando uma aplicação apresenta um token de acesso ao endpoint `userInfo`, o servidor de autorização retorna um corpo de resposta que contém os atributos do usuário que estão dentro dos limites definidos pelos escopos do token de acesso. Essa aplicação pode recuperar informações sobre um usuário a partir do endpoint `userInfo`, desde que tenha um token de acesso válido com pelo menos uma reivindicação de escopo `openid`.

O endpoint `userInfo` é um [endpoint userInfo](https://openid.net/specs/openid-connect-core-1_0.html#UserInfo) do OpenID Connect (OIDC). Ele responde com atributos do usuário quando os provedores de serviço apresentam os tokens de acesso que seu [endpoint do](token-endpoint.md) emitiu. Os escopos no token de acesso do usuário definem os atributos do usuário que o endpoint userInfo retorna em sua resposta. O escopo `openid` deve ser uma das reivindicações do token de acesso.

O Amazon Cognito emite tokens de acesso em resposta a solicitações de API dos grupos de usuários, como [https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html). Como elas não contêm escopos, o endpoint userInfo não aceita esses tokens de acesso. Em vez disso, você deve apresentar os tokens de acesso do endpoint de token.

Seu provedor de identidade terceirizado (IdP) OAuth 2.0 também hospeda um userInfo endpoint. Quando o usuário faz a autenticação com esse IdP, o Amazon Cognito troca silenciosamente um código de autorização com o endpoint `token` do IdP. Seu grupo de usuários passa o token de acesso do IdP para autorizar a recuperação das informações do usuário do endpoint `userInfo` do IdP.

Os escopos no token de acesso de um usuário são determinados pelo parâmetro de solicitação `scopes` nas solicitações de autenticação ou pelos escopos que o [acionador do Lambda de pré-geração de tokens](user-pool-lambda-pre-token-generation.md) adiciona. Você pode decodificar tokens de acesso e examinar as declarações `scope` para ver os escopos de controle de acesso que elas contêm. A seguir estão algumas combinações de escopo que influenciam os dados retornados do endpoint `userInfo`. O escopo reservado do Amazon Cognito `aws.cognito.signin.user.admin` não afeta os dados retornados desse endpoint.Exemplos de escopos no token de acesso e seus efeitos na resposta `userInfo`

**`openid`**  
Retorna uma resposta com todos os atributos do usuário que o cliente de aplicação pode ler.

**`openid profile`**  
Retorna os atributos do usuário `name`, `family_name`, `given_name`, `middle_name`, `nickname`, `preferred_username`, `profile`, `picture`, `website`, `gender`, `birthdate`, `zoneinfo`, `locale` e `updated_at`. Também retorna [atributos personalizados](user-pool-settings-attributes.md#user-pool-settings-custom-attributes). Em clientes da aplicação que não têm acesso de leitura a cada atributo, a resposta a esse escopo inclui todos os atributos da especificação aos quais o cliente de aplicação tem acesso de leitura.

**`openid email`**  
Retorna informações básicas do perfil e os atributos `email` e `email_verified`.

**`openid phone`**  
Retorna informações básicas do perfil e os atributos `phone_number` e `phone_number_verified`.

## GET /oauth2/userInfo
<a name="get-userinfo"></a>

A aplicação gera solicitações para este endpoint diretamente, não por meio de um navegador.

Para ter mais informações, consulte [Endpoint UserInfo](http://openid.net/specs/openid-connect-core-1_0.html#UserInfo) na especificação do OpenID Connect (OIDC).

**Topics**
+ [GET /oauth2/userInfo](#get-userinfo)
+ [Parâmetros de solicitação no cabeçalho](#get-userinfo-request-header-parameters)
+ [Exemplo - solicitação](#get-userinfo-positive-exchanging-authorization-code-for-userinfo-sample-request)
+ [Exemplo - resposta positiva](#get-userinfo-response-sample)
+ [Exemplo - respostas negativas](#get-userinfo-negative)

## Parâmetros de solicitação no cabeçalho
<a name="get-userinfo-request-header-parameters"></a>

**`Authorization: Bearer <access_token>`**  
Repasse o token de acesso no campo do cabeçalho da autorização.  
Obrigatório.

## Exemplo - solicitação
<a name="get-userinfo-positive-exchanging-authorization-code-for-userinfo-sample-request"></a>

```
GET /oauth2/userInfo HTTP/1.1
Content-Type: application/x-amz-json-1.1
Authorization: Bearer eyJra12345EXAMPLE
User-Agent: [User agent]
Accept: */*
Host: auth.example.com
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
```

## Exemplo - resposta positiva
<a name="get-userinfo-response-sample"></a>

```
HTTP/1.1 200 OK
Content-Type: application/json;charset=UTF-8
Content-Length: [Integer]
Date: [Timestamp]
x-amz-cognito-request-id: [UUID]
X-Content-Type-Options: nosniff
X-XSS-Protection: 1; mode=block
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Pragma: no-cache
Expires: 0
Strict-Transport-Security: max-age=31536000 ; includeSubDomains
X-Frame-Options: DENY
Server: Server
Connection: keep-alive
{
    "sub": "[UUID]",
    "email_verified": "true",
    "custom:mycustom1": "CustomValue",
    "phone_number_verified": "true",
    "phone_number": "+12065551212",
    "email": "bob@example.com",
    "username": "bob"
}
```

Para obter uma lista de solicitações OIDC, consulte [Solicitações padrão](http://openid.net/specs/openid-connect-core-1_0.html#StandardClaims). No momento, o Amazon Cognito retorna os valores para `email_verified` e `phone_number_verified` como strings.

## Exemplo - respostas negativas
<a name="get-userinfo-negative"></a>

### Exemplo - solicitação inválida
<a name="get-userinfo-negative-400"></a>

```
HTTP/1.1 400 Bad Request
WWW-Authenticate: error="invalid_request",
error_description="Bad OAuth2 request at UserInfo Endpoint"
```

**`invalid_request`**  
A solicitação não possui um parâmetro obrigatório, inclui um valor de parâmetro não compatível ou contém informações incorretas.

### Exemplo - token inválido
<a name="get-userinfo-negative-401"></a>

```
HTTP/1.1 401 Unauthorized
WWW-Authenticate: error="invalid_token",
error_description="Access token is expired, disabled, or deleted, or the user has globally signed out."
```

**`invalid_token`**  
O token de acesso está expirado, revogado, informado incorretamente ou inválido.

# O endpoint de revogação do token
<a name="revocation-endpoint"></a>

Os usuários que têm um token de atualização em sua sessão têm algo semelhante a um cookie de navegador. Eles podem renovar a sessão existente, desde que o token de atualização seja válido. Em vez de solicitar que o usuário faça login após a expiração do ID ou do token de acesso, a aplicação pode usar o token de atualização para obter tokens novos e válidos. No entanto, você pode determinar externamente que a sessão de um usuário seja encerrada, ou o usuário pode optar por esquecer a sessão atual. Nesse ponto, você pode revogar esse token de atualização para que eles não possam mais persistir na sessão.

O endpoint `/oauth2/revoke` revoga o token de acesso de um usuário que o Amazon Cognito emitiu inicialmente com o token de atualização fornecido por você. Esse endpoint também revoga o próprio token de atualização e todos os tokens de acesso e identidade subsequentes do mesmo token de atualização. Depois que o endpoint revogar os tokens, você não poderá usar os tokens de acesso revogados para acessar a autenticação dos tokens do Amazon APIs Cognito.

## POST /oauth2/revoke
<a name="post-revoke"></a>

O endpoint `/oauth2/revoke` só é compatível com `HTTPS POST`. O cliente do grupo de usuários faz solicitações para esse endpoint diretamente e não por meio do navegador do sistema.

### Parâmetros de solicitação no cabeçalho
<a name="revocation-request-parameters"></a>

**`Authorization`**  
Se o cliente da aplicação tiver recebido um segredo, a aplicação precisará passar o `client_id` e o `client_secret` no cabeçalho da autorização por meio da autorização HTTP básica. O segredo é [https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side](https://en.wikipedia.org/wiki/Basic_access_authentication#Client_side)básico`Base64Encode(client_id:client_secret)`.

**`Content-Type`**  
Precisa ser sempre `'application/x-www-form-urlencoded'`.

#### Parâmetros de solicitação no corpo
<a name="revocation-request-parameters-body"></a>

**`token`**  
(Obrigatório) O token de atualização que o cliente quer revogar. A solicitação também revoga todos os tokens de acesso que o Amazon Cognito emitiu com esse token de atualização.  
Obrigatório.

**`client_id`**  
(Opcional) O ID do cliente da aplicação para o token que você deseja revogar.  
Obrigatório se o cliente for público e não tiver um segredo.

## Exemplos de solicitação de revogação
<a name="revoke-sample-request"></a>

Esta solicitação revoga um token de atualização para um cliente de aplicação que não tem segredo de cliente. O parâmetro `client_id` contém o corpo da solicitação.

```
POST /oauth2/revoke HTTP/1.1
Host: mydomain.auth.us-east-1.amazoncognito.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
token=2YotnFZFEjr1zCsicMWpAA&
client_id=1example23456789
```

Esta solicitação revoga um token de atualização para um cliente de aplicação que *tem* um segredo de cliente. Observe que o cabeçalho `Authorization` contém um ID de cliente e um segredo de cliente codificados, mas nenhum `client_id` no corpo da solicitação.

```
POST /oauth2/revoke HTTP/1.1
Host: mydomain.auth.us-east-1.amazoncognito.com
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Basic czZCaGRSa3F0MzpnWDFmQmF0M2JW
token=2YotnFZFEjr1zCsicMWpAA
```

## Resposta de erro de revogação
<a name="revoke-sample-response"></a>

Uma resposta bem-sucedida contém um corpo vazio. A resposta de erro é um objeto JSON com um campo `error` e, em alguns casos, um campo `error_description`.

**Erros de endpoint**
+ Se o token não estiver presente na solicitação ou se o recurso estiver desabilitado para o cliente da aplicação, você receberá HTTP 400 e o erro `invalid_request`.
+ Se o token que o Amazon Cognito enviou na solicitação de revogação não for um token de atualização, você receberá um HTTP 400 e um erro `unsupported_token_type`.
+ Se as credenciais do cliente não forem válidas, você receberá um HTTP 401 e um erro `invalid_client`.
+ Se o token tiver sido revogado ou se o cliente tiver enviado um token que não é válido, você receberá um HTTP 200 OK. 

# O endpoint de declaração SAML do IdP
<a name="saml2-idpresponse-endpoint"></a>

O `/saml2/idpresponse` recebe declarações de SAML. No login service-provider-initiated (iniciado pelo SP), seu aplicativo não interage diretamente com esse endpoint — seu provedor de identidade (IdP) do SAML 2.0 redireciona seu usuário aqui com a resposta do SAML. Para login iniciado pelo SP, configure seu IdP com o caminho para `saml2/idpresponse` como URL do serviço de consumidor de declaração (ACS). Para obter mais informações sobre o início da sessão, consulte [Iniciação de sessão SAML em grupos de usuários do Amazon Cognito](cognito-user-pools-SAML-session-initiation.md).

No login iniciado pelo IdP, invoque solicitações para esse endpoint em sua aplicação depois de fazer login como usuário com seu provedor SAML 2.0. Seus usuários fazem login com seu IdP no navegador e, em seguida, a aplicação coleta a declaração SAML e a envia para esse endpoint. Você deve enviar declarações SAML no corpo de uma solicitação `HTTP POST` por HTTPS. O corpo da sua solicitação `POST` deve ser um parâmetro `SAMLResponse` e um parâmetro `Relaystate`. Para obter mais informações, consulte [Implementar o login SAML iniciado pelo IdP](cognito-user-pools-SAML-session-initiation.md#cognito-user-pools-SAML-session-initiation-idp-initiation).

O endpoint `saml2/idpresponse` pode aceitar declarações SAML de até 100.000 caracteres.

## POST `/saml2/idpresponse`
<a name="saml2-idpresponse-endpoint-post"></a>

Para usar o endpoint `/saml2/idpresponse` em um login iniciado por IdP, gere uma solicitação POST com parâmetros que forneçam ao seu grupo de usuários os detalhes da sessão do usuário.
+ O cliente da aplicação no qual ele deseja fazer login.
+ O URL de retorno de chamada ao qual ele deseja chegar.
+ Os escopos OAuth 2.0 que eles desejam solicitar no token de acesso do seu usuário.
+ O IdP que iniciou a solicitação de login.

### Parâmetros do corpo da solicitação iniciados pelo IdP
<a name="saml2-idpresponse-endpoint-post-request"></a>

*SAMLResponse*  
Uma declaração SAML codificada em Base64 de um IdP associado a um cliente de aplicação válido e a uma configuração de IdP em seu grupo de usuários.

*RelayState*  
Um parâmetro `RelayState` contém os parâmetros de solicitação que, de outra forma, você passaria para o endpoint `oauth2/authorize`. Para mais informações sobre esses parâmetros, consulte [Autorizar endpoint](authorization-endpoint.md).    
*response\$1type*  
O tipo de subsídio OAuth 2.0.  
*client\$1id*  
O ID do cliente do aplicativo  
*redirect\$1uri*  
O URL para o qual o servidor de autenticação redireciona o navegador depois que o Amazon Cognito autoriza o usuário.  
*identity\$1provider*  
O nome do provedor de identidades para o qual você deseja redirecionar o usuário.  
*idp\$1identifier*  
O identificador do provedor de identidades para o qual você deseja redirecionar o usuário.  
*scope*  
Os escopos OAuth 2.0 que você deseja que seu usuário solicite do servidor de autorização.

### Exemplos de solicitações com respostas positivas
<a name="saml2-idpresponse-endpoint-post-example"></a>

**Exemplo - solicitação POST**  
A solicitação a seguir é para uma concessão de código de autorização para um usuário do IdP `MySAMLIdP` no cliente de aplicação `1example23456789`. O usuário redireciona para `https://www.example.com` com seu código de autorização, que pode ser trocado por tokens que incluem um token de acesso com os escopos OAuth `openid` 2.0, e. `email` `phone`

```
POST /saml2/idpresponse HTTP/1.1
User-Agent: USER_AGENT
Accept: */*
Host: example.auth.us-east-1.amazoncognito.com
Content-Type: application/x-www-form-urlencoded

SAMLResponse=[Base64-encoded SAML assertion]&RelayState=identity_provider%3DMySAMLIdP%26client_id%3D1example23456789%26redirect_uri%3Dhttps%3A%2F%2Fwww.example.com%26response_type%3Dcode%26scope%3Demail%2Bopenid%2Bphone
```

**Exemplo - resposta**  
Veja a seguir um exemplo de resposta para a solicitação anterior.

```
HTTP/1.1 302 Found
Date: Wed, 06 Dec 2023 00:15:29 GMT
Content-Length: 0
x-amz-cognito-request-id: 8aba6eb5-fb54-4bc6-9368-c3878434f0fb
Location: https://www.example.com?code=[Authorization code]
```