O que é um pedido de autenticação (authentication request)?
Embora o significado de um pedido de autenticação (authentication request) possa variar dependendo do contexto, vamos focar-nos na definição da especificação OpenID Connect (OIDC). No OIDC, um pedido de autenticação é um Pedido de autorização (Authorization request) para o servidor de autorização (authorization server) para autenticar um utilizador.
A definição padrão parece muito confusa porque termos semelhantes, como “pedido de autorização (authorization request)”, são usados. Isso ocorre porque o OIDC é construído sobre o OAuth 2.0, que é projetado principalmente para autorização, e o OIDC herda a terminologia do OAuth 2.0 e estende-a para suportar autenticação.
Para esclarecer, vamos adicionar algum contexto à definição:
Um pedido de autenticação (OpenID Connect) é um pedido de autorização (OAuth 2.0 authorization) para o servidor de autorização (OpenID Connect authorization) para autenticar um utilizador.
Fica ainda mais longo! Agora vamos remover todos os parênteses:
Um pedido de autenticação é um pedido para o servidor para autenticar um utilizador.
Após remover todos os atributos, a definição torna-se direta. Aqui estão as divisões dos termos:
- Pedido de autenticação (Authentication request): O termo da especificação OIDC.
- Pedido de autorização (Authorization request) : O termo da especificação OAuth 2.0. O OIDC reutiliza a especificação e estende-a.
- Servidor de autorização : O termo da especificação OAuth 2.0. O OIDC também usa o termo OpenID Provider (OP) para se referir à mesma entidade que é capaz de autenticar utilizadores.
Nas seções seguintes, usaremos “OpenID Provider (OP)” para nos referirmos ao servidor de autorização que suporta OIDC.
Como funciona um pedido de autenticação (authentication request)?
Quando uma aplicação cliente deseja autenticar um utilizador, inicia um pedido de autenticação para o OpenID Provider (OP). Como mencionámos anteriormente, o pedido de autenticação também é um pedido de autorização no OAuth 2.0; assim, certos tipos de concessão (grant types) do OAuth 2.0 podem ser usados para completar o processo de autenticação.
O OIDC define três tipos de concessão (grant types) para suportar autenticação:
- Fluxo de código de autorização (Authorization code flow) : O fluxo de autenticação mais recomendado. É geralmente usado com Prova de Chave para Troca de Código (PKCE) para melhor segurança e é adequado para a maioria das aplicações.
- Fluxo implícito (Implicit flow) : Um fluxo simplificado que está obsoleto no OAuth 2.1 devido a preocupações de segurança.
- Fluxo híbrido (Hybrid flow) : Uma combinação do fluxo de código de autorização e do fluxo implícito.
O pedido de autenticação é o primeiro passo no fluxo de autenticação OIDC. Os parâmetros reais a incluir e os passos a seguir dependem do fluxo que escolher. Clique nos nomes dos fluxos acima para saber mais sobre cada fluxo.
Aqui está um exemplo simplificado de um pedido de autenticação usando o fluxo de código de autorização:
Uma vez que o cliente recebe os tokens, pode usá-los (por exemplo, Token de acesso (Access token) ) para acessar recursos protegidos (por exemplo, uma API) em nome do utilizador.
Parâmetros chave num pedido de autenticação (authentication request)
Aqui estão alguns parâmetros chave num pedido de autenticação:
response_type
: O tipo de resposta que o cliente espera do servidor de autorização. Pode sercode
para o fluxo de código de autorização,id_token
para o fluxo implícito, oucode id_token
para o fluxo híbrido.client_id
: O identificador do cliente emitido pelo OpenID Provider (OP).redirect_uri
: O URI para o qual o servidor de autorização redirecionará o agente do utilizador após o pedido de autenticação.scope
: Os escopos (permissões) solicitados para o Token de ID (ID token) e Token de acesso (Access token) .resource
: O parâmetro opcional que especifica o Indicador de recurso (Resource indicator) para os recursos solicitados. O servidor de autorização precisa suportar RFC 8707 para usar este parâmetro.
Note que os parâmetros acima não são exaustivos. Antes de fazer um pedido de autenticação, deves consultar a lista completa de parâmetros para o fluxo específico que estás a usar.