Modern Authentication – Autorização e Autenticação: conceitos e aplicações na plataforma Entra ID
Introdução
A internet é um espaço de interação e troca de informações entre diversos agentes, como usuários, aplicativos, serviços e recursos. Para garantir a segurança e a privacidade dessas interações, é necessário estabelecer mecanismos de autenticação e autorização que verifiquem a identidade e o acesso dos agentes envolvidos. Os protocolos modernos mais utilizados para esse fim são o OpenID Connect (OIDC), Open Authentication (OAuth) e Security Assertion Markup Language (SAML). Esses protocolos têm como objetivo permitir que um aplicativo obtenha acesso limitado a um recurso protegido em nome de um usuário, sem que este precise compartilhar suas credenciais com o aplicativo.
O objetivo desta série de artigos é apresentar os conceitos e as aplicações dos protocolos SAML, OAuth e OIDC, utilizando como IAM o Entra ID. Serão explicados como esses protocolos operam, quais são seus benefícios e desafios, e como podem ser implementados em diferentes cenários. A tese defendida neste artigo é que o SAML, OAuth e o OIDC são protocolos flexíveis, seguros e eficientes para a gestão de autenticação e autorização na internet, mas que também requerem cuidados e boas práticas para evitar vulnerabilidades e riscos.
O artigo foi dividido em 6 seções:
Seção 1: Revisão teórica sobre os conceitos de autenticação e autorização e os protocolos mais utilizados atualmente, separados em blocos legado e moderno.
Seção 2: Descrição do funcionamento do SAML, explicando seus principais componentes, fluxos e especificações.
Seção 3: Descrição do funcionamento do OAuth, explicando seus principais componentes, fluxos e especificações.
Seção 4: Descrição do funcionamento do OpenID Connect, explicando seus principais componentes, fluxos e especificações.
Seção 5: Apresentação de exemplos de aplicações usando SAML, OAuth e OIDC em diferentes contextos, como redes sociais, serviços de nuvem e dispositivos móveis.
Seção 6: Discussão dos benefícios e desafios do SAML, OAuth e OIDC, analisando suas vantagens e desvantagens, bem como suas recomendações e limitações.
Seção 1 – Revisão teórica e conceitos de autenticação e autorização e sua evolução
Termos:
Authentication => AuthN
Authrorization => AuthZ
Identity Access Manegament => IAM
Identity Provider => IdP
Service Provider => SP
Single Sign-On => SSO
Conceitos de Autenticação e Autorização
A Autenticação(AuthN) é o processo de identificar o agente, ou seja responder a perguntar “Who are you?”.
Já o processo de Autorização(AuthZ) é a validação se o agente tem da permissão de acesso aos recursos solicitados, “Can you do that?”.
Autenticação Legada
As autenticações legadas iremos definir como métodos tradicionais de autenticação do usuário sendo que normalmente esses métodos não possuem fatores adicionais de autenticação e é bem comum que as aplicações realizem autenticações ativas e não passivas. Além desses métodos não terem sido desenhados para permitir autenticações de usuários localizados em outros IdP.
Temos alguns protocolos de autenticação legado bem conhecidos como:
* Digest Authentication
* NTLM
* Kerberos
Nesse tipo de fluxo de autenticação normalmente as aplicações realizam todo o processo de autenticação o que aumenta a complexidade no desenvolvimento, manutenção, segurança e implementações de novas camadas de segurança.
Basic Authentication
O Basic Authentication é o sistema de autenticação mais “básico / comum” do protocolo HTTP definido pela RFC 7617.
Como isso Funciona:
Quando um usuário tenta acessar um recurso protegido ele recebe um retorno do servidor com o código HTTP 401 (Unauthorized) e um cabeçalho WWW-Authenticate, que fornece informações sobre como se autenticar.
O cliente envia o pedido com o cabeçalho de autenticação no formato:
Authorization: Basic {credenciais em base 64 no formato usuário:senha}.
Lembre-se de que o Base 64 é um esquema de codificação, não criptografia.
Essas informações são recebidas no servidor, que verifica se as credenciais são válidas(podendo essa validação ser utilizado uma autenticação via LDAP ou local).
Se as credenciais estiverem correta o cliente receberá uma resposta diferente de 403 (Forbidden).
É importante observar que o uso do Base 64 se deve ao padrão MIME. Portanto, o Basic Authentication deve ser utilizado apenas com uma conexão HTTPS(RFC2818 – HTTP over TLS) para garantir a segurança. No entanto, mesmo com HTTPS, o Basic Auth não é 100% seguro, pois as credenciais são enviadas a cada requisição de autenticação nova.
Em resumo, o Basic Authentication é método simples e de rápida implementação, mas sua segurança depende do nível de risco dos dados em trânsito.
Para dados sigilosos, outras opções de autenticação e autorização, como SAML, OAuth e OIDC, podem ser mais adequadas.
Digest Authentication
A Digest Authentication, conforme definida na RFC 2617, é um método pelo qual um servidor da web pode negociar credenciais, como nome de usuário ou senha, com o navegador da web de um usuário bem similar ao BASIC Authentication conform vimos anteriormente porém diferentemente do Basic Authentication esse método calcula o HASH do usuário e senha antes de enviar ao site.
Processo de Autenticação:
O cliente faz uma solicitação de acesso.
O servidor gera algumas informação dentre elas o nonce (código que será usado apenas uma vez) e o envia ao cliente.
O cliente calcula o hash da senha e outras informações (como o método HTTP e o URI solicitado) usando o nonce.
O cliente envia a resposta ao servidor no formato: Authorization: Digest username=”usuário”, realm=”realm”, nonce=”nonce”, uri=”URI”, response=”hash”.
O servidor verifica a resposta e concede acesso se tudo estiver correto.
Em resumo, a autenticação Digest é uma alternativa à autenticação básica, oferecendo maior segurança ao usar hashes e nonces para proteger as credenciais do usuário durante a comunicação com o servidor.
NTLM
O NTLM (NT LAN Manager) é um protocolo de autenticação baseado em desafio-resposta.
Protocolo NTLM:
O NTLM inclui várias versões, como LAN Manager versão 1 e 2, e NTLM versão 1 e 2.
Ele autentica usuários e computadores com base em um mecanismo de desafio/resposta.
O servidor ou controlador de domínio verifica se o usuário conhece a senha associada à conta.
Processo de Autenticação:
Quando um usuário tenta acessar um recurso protegido, o servidor gera um desafio.
O cliente (usuário ou computador) responde ao desafio com um hash da senha.
O servidor verifica o hash e concede acesso se for válido.
Aplicações Atuais:
O NTLM ainda é usado para autenticação em sistemas configurados como membros de um workgroup.
Também é usado para autenticação de logon local em servidores que não são controladores de domínio.
Apesar da recomendação no uso do Keberos como o método preferencial, aplicações podem fazer o uso do NTLM para autenticar seus usuários
Em resumo, o NTLM é um protocolo de autenticação legado que deve ser usado com cautela, considerando suas limitações e riscos de segurança.
Kerberos
O Kerberos é um protocolo de autenticação de rede desenvolvido pelo Massachusetts Institute of Technology (MIT) na década de 1980. Ele fornece um método seguro para autenticar usuários e serviços em uma rede, garantindo que apenas usuários autorizados tenham acesso aos recursos.
A autenticação Kerberos é um processo de várias etapas que envolve os seguintes componentes:
Cliente: O cliente inicia a necessidade de uma solicitação de serviço em nome do usuário.
Servidor: O servidor hospeda o serviço ao qual o usuário precisa acessar.
AS (Authentication Server): O AS executa a autenticação do cliente.
KDC (Key Distribution Center) e seus três componentes:
TGS (Ticket Granting Server): Emissor de bilhetes de serviço.
Banco de Dados Kerberos: Armazena informações de autenticação.
Em resumo, o Kerberos oferece uma solução confiável para autenticação em redes distribuídas, garantindo a proteção dos dados confidenciais e a autenticação segura de usuários e serviços.
Autenticação moderna
A autenticação moderna é um termo guarda-chuva que engloba uma combinação de métodos de autenticação e autorização entre um cliente e um recurso, juntamente com medidas de segurança baseadas em políticas de acesso.
Iremos abordar nas demais seções os protocolos que estão dentro desse termo como:
SAML
OAUTH2
OPEN ID CONNECT – OIDC
Referências
Microsoft – Basic Authentication in ASP.NET Web API
Microsoft – Digest Authentication
Microsoft – Protocols – Digest Validation Protocol
Microsoft – Kerberos Authentication Overview
MIT – Kerberos Documentation
Microsoft Tech Community – Latest Blogs –Read More