Segurança OAuth: Um Guia para Desenvolvedores (PT-PT)
Aprenda a proteger fluxos de autorização OAuth, proteger tokens de acesso e mitigar vulnerabilidades comuns. Implemente as melhores práticas de segurança de API com este guia completo.

Segurança OAuth: Um Guia para Desenvolvedores
O OAuth 2.0 é o padrão da indústria para autorização delegada. Permite que aplicações de terceiros acedam a recursos limitados em nome de um utilizador sem expor as suas credenciais. No entanto, implementar o OAuth de forma segura é complexo. Este guia oferece uma análise aprofundada das melhores práticas de segurança OAuth para desenvolvedores, cobrindo vulnerabilidades comuns e estratégias de mitigação.
Ponto Chave 1 A segurança OAuth não se resume ao fornecedor OAuth; é uma responsabilidade partilhada entre o fornecedor, a aplicação cliente e o servidor de recursos.
Ponto Chave 2 A validação adequada dos URIs de redirecionamento é crucial para evitar ataques de interceção de código de autorização.
Ponto Chave 3 Utilizar tokens de acesso de curta duração e rotação de tokens de atualização reduz significativamente o impacto do comprometimento de tokens.
Ponto Chave 4 Auditar regularmente a sua implementação OAuth e manter-se atualizado com as melhores práticas de segurança é essencial.
Compreender os Fluxos OAuth e as Vulnerabilidades
O OAuth 2.0 define vários tipos de concessão, cada um adequado para diferentes cenários de aplicação. Os mais comuns são:
- Concessão de Código de Autorização: Utilizado para aplicações web e móveis onde o cliente pode armazenar um segredo de cliente de forma segura.
- Concessão Implícita: (Descontinuada) Utilizado para aplicações de página única (SPAs) mas é menos seguro devido à exposição de tokens de acesso na URL.
- Concessão de Credenciais de Password do Proprietário de Recursos: (Desencorajado) Requer que o cliente recolha o nome de utilizador e a password do utilizador, o que representa um risco de segurança.
- Concessão de Credenciais do Cliente: Utilizado para autenticação máquina a máquina onde não está disponível um contexto de utilizador.
Várias vulnerabilidades podem surgir durante o fluxo OAuth:
- Interceção de Código de Autorização: Atacantes redirecionam utilizadores para um site malicioso que se assemelha ao servidor de autorização, roubando o código de autorização.
- Manipulação do URI de Redirecionamento: Exploração de URIs de redirecionamento mal configurados para enviar códigos de autorização para servidores controlados por atacantes.
- Falsificação de Pedido Inter-Site (CSRF): Atacantes enganam os utilizadores para autorizar uma aplicação maliciosa.
- Roubo de Token: Comprometer tokens de acesso ou tokens de atualização através de vulnerabilidades de armazenamento ou interceção de rede.
- Impersonificação do Cliente: Atacantes que utilizam um ID de cliente e segredo comprometidos para aceder a recursos.
Garantir a Sua Implementação OAuth
Mitigar estas vulnerabilidades requer uma abordagem em camadas:
1. Validação do URI de Redirecionamento
Valide rigorosamente os URIs de redirecionamento. Permita apenas URIs de redirecionamento pré-registados e explicitamente definidos. Implemente uma abordagem de lista branca e evite padrões curinga. Certifique-se de que o esquema do URI de redirecionamento (http vs. https) também é validado. O OAuth 2.0 RFC 6749 secção 3.1.2 enfatiza a importância da validação do URI de redirecionamento.
2. Parâmetro State e Nonce
Utilize o parâmetro state para evitar ataques CSRF. Gere um valor state aleatório criptograficamente antes de redirecionar para o servidor de autorização e verifique-o ao receber o callback. Considere também utilizar um parâmetro nonce para segurança adicional.
3. PKCE (Prova de Troca de Chave de Código)
Implemente o PKCE, especialmente para clientes públicos (por exemplo, aplicações móveis, SPAs) que não conseguem armazenar um segredo de cliente de forma segura. O PKCE adiciona uma camada extra de proteção, garantindo que apenas a aplicação que iniciou o pedido de autorização pode trocar o código de autorização por um token de acesso.
// Exemplo de código PKCE (simplificado)// Gere um verificador de códigolet codeVerifier = generateRandomString();// Gere um desafio de código a partir do verificador de códigolet codeChallenge = generateCodeChallenge(codeVerifier);// Inclua codeChallenge e codeChallengeMethod no pedido de autorização// ...// Troque o código de autorização por um token de acesso, fornecendo o verificador de código// ...
4. Gestão de Tokens
Utilize tokens de acesso de curta duração para minimizar o impacto do comprometimento de tokens. Implemente a rotação do token de atualização, onde um novo token de atualização é emitido com cada atualização do token de acesso, invalidando o token de atualização anterior. Armazene os tokens de forma segura utilizando encriptação e controlos de acesso. Nunca armazene tokens no código do lado do cliente.
Considerações de Segurança da API
Garantir os seus endpoints de API é tão crucial como garantir o fluxo OAuth. Implemente estas melhores práticas:
- Validação de Token: Valide minuciosamente os tokens de acesso antes de conceder acesso aos recursos. Verifique a assinatura, o tempo de expiração e o público (
audclaim) do token. - Validação de Âmbito: Faça cumprir as restrições de âmbito. Certifique-se de que o token de acesso tem os âmbitos necessários para aceder ao recurso solicitado.
- Limitação de Taxa: Implemente a limitação de taxa para evitar abusos e ataques de negação de serviço.
- Validação de Entrada: Valide todas as entradas da API para evitar ataques de injeção.
- Apenas HTTPS: Force o HTTPS para toda a comunicação da API.
Como a Didit Ajuda
A Didit fornece capacidades robustas de verificação de identidade e avaliação de risco que complementam a segurança OAuth. Ao integrar a Didit no seu fluxo OAuth, pode:
- Verificar a identidade do utilizador antes de emitir tokens de acesso.
- Detetar atividades fraudulentas e prevenir acessos não autorizados.
- Aumentar a segurança da API com controlo de acesso baseado em risco.
- Cumprir os requisitos regulamentares relacionados com a verificação de identidade e AML.
O módulo de Screening AML da Didit pode ser integrado para verificar os utilizadores em relação a listas de verificação globais durante o processo OAuth, adicionando uma camada extra de segurança.
Pronto para Começar?
Implementar uma segurança OAuth robusta é fundamental para proteger a sua aplicação e os dados do utilizador. Ao seguir as melhores práticas descritas neste guia, pode reduzir significativamente o risco de vulnerabilidades relacionadas com o OAuth.
Recursos: