Logo Logo
GitHub Designed by Logto

O que é um URI de redirecionamento?

Um URI de redirecionamento, também conhecido como URL de callback ou URL de redirecionamento, é um URI para indicar onde o Servidor de autorização deve redirecionar o user-agent após a conclusão do Pedido de autorização (Authorization request) .

Universal Resource Identifier (URI) são frequentemente confundidos com URL (Uniform Resource Locator). Para mais informações, confira Desvendando URI, URL e URN .

Vamos dar uma olhada em um exemplo de um authorization request que inclui um URI de redirecionamento:

GET /authorize?response_type=code
  &client_id=YOUR_CLIENT_ID
  &redirect_uri=https%3A%2F%2Fclient.example.com%2Fcallback
  &scope=openid%20profile%20email
  &state=abc123
  &nonce=123456 HTTP/1.1

Neste exemplo, o valor bruto do parâmetro redirect_uri é https%3A%2F%2Fclient.example.com%2Fcallback, que está codificado em URL. O valor real é https://client.example.com/callback.

Como funciona um URI de redirecionamento?

No contexto do OpenID Connect (OIDC) , o fluxo de trabalho para o OAuth 2.0’s Pedido de autorização (Authorization request) e Servidor de autorização aplica-se de forma semelhante. O URI de redirecionamento funciona da mesma maneira que no OAuth 2.0, tanto para Pedido de autenticação (Authentication request) quanto para OpenID Provider (OP) .

Vamos supor que o Cliente inicie o authorization request a partir do URL https://client.example.com. Após o usuário completar o processo de autorização, o authorization server redirecionará o user-agent (navegador) de volta para https://client.example.com/callback.

É claro que o URI de redirecionamento é essencial para o authorization server redirecionar o user-agent de volta quando o processo de autorização estiver completo. Além disso, o URI de redirecionamento também é usado para receber o authorization code ou tokens, dependendo do fluxo.

Aqui está um exemplo não normativo de como o redirecionamento real em um Fluxo de código de autorização (Authorization code flow) pode parecer:

HTTP/1.1 302 Found
Location: https://client.example.com/callback?code=AUTHORIZATION_CODE&state=abc123

Note que os parâmetros de URL code e state que são anexados pelo authorization server estão incluídos no URI de redirecionamento. O client precisa extrair os parâmetros code e state da URL para continuar o processo de autorização.

Por que precisamos de um URI de redirecionamento?

Como podemos ver no exemplo acima, o authorization server precisa saber para onde redirecionar após um authorization request bem-sucedido. É especialmente útil quando há múltiplos clients (ou seja, Início de sessão único (SSO) ), e cada client tem um URI de redirecionamento diferente.

Com o Fluxo de código de autorização (Authorization code flow) , o URI de redirecionamento também é usado para passar o authorization code de volta para o client, em vez de usar o front-channel (navegador) para evitar expor os tokens a possíveis ataques.

Era possível usar o Resource Owner Password Credentials (ROPC) grant para obter tokens para o usuário sem um URI de redirecionamento. No entanto, ele está obsoleto no OAuth 2.1 devido a preocupações de segurança.

Considerações de segurança

O URI de redirecionamento é um parâmetro crítico e é um alvo comum para atacantes. Aqui estão algumas considerações de segurança a serem mantidas em mente:

  • Lista branca de URIs de redirecionamento: O client deve aceitar apenas URIs de redirecionamento que estão registrados com o authorization server. Isso impede que atacantes redirecionem usuários para sites maliciosos.
  • Use HTTPS: Sempre use HTTPS para o URI de redirecionamento para proteger a comunicação entre o client e o authorization server.
  • Correspondência exata: O URI de redirecionamento deve corresponder exatamente ao URI registrado. Os authorization servers podem impor regras de correspondência estritas que desautorizam padrões de correspondência amplos.
  • Parâmetro de estado: Use o parâmetro state para prevenir ataques de Falsificação de solicitação entre sites (CSRF) . O client deve validar o parâmetro state para garantir que ele corresponda ao valor enviado no authorization request.

Veja também