

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

# 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
    ```