O que é o fluxo híbrido (hybrid flow)?
O fluxo híbrido (hybrid flow) é um processo de autenticação (authentication) que combina as características do Fluxo de código de autorização (Authorization code flow) e do Fluxo implícito (Implicit flow) . Vale a pena notar que o fluxo híbrido (hybrid flow) não faz parte da especificação do OAuth 2.0 , mas é uma extensão fornecida pelo OpenID Connect (OIDC) .
Este fluxo é projetado para fornecer um equilíbrio entre segurança e usabilidade para a autenticação (authentication) do utilizador. No entanto, o fluxo híbrido (hybrid flow) não é recomendado para novas aplicações devido às considerações de segurança associadas ao fluxo implícito (implicit flow). Uma alternativa popular ao fluxo híbrido (hybrid flow) é usar o fluxo de autorização (authorization code flow) com Prova de Chave para Troca de Código (PKCE) para melhor segurança.
Como funciona o fluxo híbrido (hybrid flow)?
Aqui estão os principais passos do fluxo híbrido (hybrid flow):
-
Semelhante a outros fluxos OIDC, o fluxo híbrido (hybrid flow) começa com o Cliente iniciando um Pedido de autenticação (Authentication request) para o OpenID Provider (OP) .
Nota: O cliente deve incluir o parâmetro
response_type
com a combinação decode
e pelo menos um deid_token
outoken
, o que significa que há três combinações possíveis:code id_token
: O cliente espera um código de autorização (authorization code) e um ID token.code token
: O cliente espera um código de autorização (authorization code) e um access token.code id_token token
: O cliente espera um código de autorização (authorization code), um ID token e um access token.
O requisito é autoexplicativo: o cliente espera tanto um código de autorização (authorization code) quanto um ou mais tokens, que correspondem ao fluxo de autorização (authorization code flow) e ao fluxo implícito (implicit flow), respectivamente.
-
O utilizador autentica-se no OpenID Provider (OP) .
-
O OpenID Provider (OP) redireciona o utilizador de volta para a aplicação cliente com o código de autorização (authorization code) e os tokens solicitados.
-
A aplicação cliente processa os tokens e pode usá-los para aceder a recursos protegidos em nome do utilizador; também pode usar o código de autorização (authorization code) para obter tokens adicionais através do Pedido de token (Token request) .
Aqui está um diagrama de sequência simplificado do fluxo híbrido (hybrid flow):
Aqui está um exemplo não normativo de um pedido de autenticação do fluxo híbrido (hybrid flow):
GET /authorize?response_type=code%20id_token
&client_id=YOUR_CLIENT_ID
&redirect_uri=https%3A%2F%2Fclient.example.com%2Fcallback
&scope=openid%20profile%20email
&nonce=123456
&state=abc123 HTTP/1.1
Host: your-openid-provider.com
Parâmetros chave em um pedido de autenticação do fluxo híbrido (hybrid flow)
O pedido de autenticação do fluxo híbrido (hybrid flow) inclui os seguintes parâmetros chave:
response_type
: O valor deve ser uma combinação decode
e pelo menos um deid_token
outoken
. Por exemplo,code id_token
oucode token
.client_id
: O identificador do cliente emitido pelo OpenID Provider (OP) (authorization server).redirect_uri
: O URI onde o authorization server envia o utilizador após o processo de autenticação (authentication).scope
: Os scopes (permissões) solicitados para os tokens.resource
: O parâmetro opcional que especifica o Indicador de recurso (Resource indicator) para os recursos solicitados. O authorization server precisa suportar RFC 8707 para usar este parâmetro.
Para a lista completa de parâmetros e suas descrições, veja Autenticação usando o Fluxo Híbrido .
Considerações de segurança
O fluxo híbrido (hybrid flow) inclui o fluxo implícito (implicit flow), que é conhecido por suas limitações de segurança. Os tokens ainda são transmitidos através do canal frontal (navegador), o que pode expô-los a potenciais ataques. O fluxo implícito (implicit flow) será descontinuado no OAuth 2.1 devido a essas preocupações.
Fluxo de código de autorização (Authorization code flow) com Prova de Chave para Troca de Código (PKCE) é a alternativa recomendada ao fluxo híbrido (hybrid flow). Ele fornece uma maneira mais segura de autenticar utilizadores sem expor tokens no canal frontal.