O que é o fluxo implícito (implicit flow)?
O fluxo implícito (implicit flow) do OAuth 2.0 é um método de autenticação que permite que aplicações apenas cliente (como SPAs e apps nativas) recebam tokens diretamente através de fragmentos de URL do servidor de autorização sem fornecer um segredo de cliente.
O fluxo implícito (implicit flow) é projetado para aplicações apenas cliente, porque elas funcionam completamente no navegador ou no dispositivo do usuário e não podem armazenar segredos de cliente de forma segura.
O fluxo implícito (implicit flow) foi oficialmente descontinuado no OAuth 2.1 por razões de segurança (serão mencionadas abaixo). Aplicações apenas cliente devem agora usar o Fluxo de código de autorização (Authorization code flow) com a extensão Prova de Chave para Troca de Código (PKCE) .
Como funciona o fluxo implícito (implicit flow)?
Os principais passos do fluxo implícito (implicit flow) são os seguintes:
Aviso:
-
O cliente só precisa fornecer um
client_id
no pedido de autorização, sem exigir umclient_secret
.
Isto porque esses clientes não podem armazenar segredos de forma segura, então este fluxo não requer um segredo de cliente. -
O parâmetro
response_type
é definido comotoken
, instruindo o servidor de autorização a retornar o access token diretamente em vez de um código de autorização.
No OIDC ( OpenID Connect (OIDC) ), oresponse_type
éid_token
ouid_token token
, e o serviço de auth retornará os tokens correspondentes com base nos diferentes tipos de resposta. -
O token é retornado diretamente no fragmento de URL. Isso significa que o token é exposto na URL e pode ser facilmente acessado por outras aplicações ou scripts.
O fluxo implícito (implicit flow) é seguro?
Não, o fluxo implícito (implicit flow) no OAuth 2.0 é geralmente considerado menos seguro do que outros fluxos como o fluxo de código de autorização (authorization code flow).
Não é recomendado para a maioria dos casos de uso devido a várias vulnerabilidades:
-
Exposição de token na URL
- Access tokens aparecem diretamente na URL do navegador (após o símbolo #)
- Esses tokens podem ser:
- Salvos no histórico do navegador
- Vazados através de cabeçalhos de referência
- Capturados por código JavaScript malicioso na mesma página
-
Sem autenticação do cliente
- A aplicação cliente não precisa provar sua identidade
- Isso significa que qualquer pessoa que conheça o
client_id
pode se passar por um cliente legítimo
-
Sem tokens de atualização (refresh tokens)
- Este fluxo não suporta tokens de atualização
- Os utilizadores devem iniciar sessão novamente quando os access tokens expirarem
- Para evitar logins frequentes, os utilizadores podem armazenar tokens de maneiras inseguras
-
Vulnerável a ataques XSS
- Todos os tokens são manipulados no navegador
- Se o site sofrer um ataque XSS (Cross-Site Scripting)
- O código JavaScript dos atacantes pode facilmente roubar esses tokens
Devido a estas preocupações de segurança, o fluxo implícito (implicit flow) foi descontinuado no OAuth 2.1 . Aplicações apenas cliente devem agora usar o Fluxo de código de autorização (Authorization code flow) com a extensão Prova de Chave para Troca de Código (PKCE) .
Podes verificar O que é PKCE: dos conceitos básicos à compreensão profunda para aprender como o PKCE protege o fluxo de código de autorização (authorization code flow) para aplicações apenas cliente.