No cenário atual, caracterizado pela intensa digitalização, a gestão simplificada de senhas tornou-se crucial. As empresas, ao adotarem cada vez mais ferramentas de colaboração, comunicação e armazenamento em nuvem, impõem um desafio aos desenvolvedores: como garantir que os funcionários acessem de forma segura aplicativos internos e dados armazenados na nuvem? Uma resposta frequente para essa questão é a autenticação SAML!
O que é SAML?
O Security Assertion Markup Language (SAML) é um padrão aberto que otimiza os processos de autenticação. Baseado em XML (Extensible Markup Language), ele padroniza a comunicação entre as entidades que precisam ser autenticadas e o serviço ou aplicação web. Em termos simples, o SAML possibilita o uso de um único login para acessar diversos aplicativos distintos.
De um lado, um provedor de serviços necessita da autenticação de um provedor de identidade (IdP) para conceder autorização ao usuário. Por exemplo, o Salesforce, como provedor de serviços, depende de um IdP para autenticar seus usuários.
Do outro lado, um provedor de identidade realiza a autenticação do usuário, verificando se ele é quem realmente alega ser, e encaminha essas informações ao provedor de serviços, juntamente com os direitos de acesso do usuário ao serviço. Um exemplo de provedor de identidade é a Auth0, reconhecida como líder em soluções de identidade.
E quanto ao Single Sign-On (SSO) com SAML?
Uma das principais funcionalidades do SAML é a viabilização do SSO. Anteriormente, o SSO era possível, mas dependia de cookies e funcionava apenas dentro do mesmo domínio.
O SAML possibilita o Single Sign-On (SSO), permitindo que os usuários acessem várias aplicações com um único login e conjunto de credenciais. Apesar de não ser uma novidade (existe desde 2002), muitos aplicativos e empresas de SaaS têm adotado o SAML para SSO. A versão mais recente, SAML 2.0, permite SSO entre diferentes domínios baseados na web e é o padrão para autorização de recursos.
Quais são as vantagens da autenticação SAML?
A utilização do SAML traz inúmeros benefícios para segurança, usuários e provedores de serviços (SPs).
Simplicidade: Os usuários realizam o login no IdP apenas uma vez, desfrutando de acesso contínuo e mais seguro a todas as aplicações.
Segurança aprimorada: Muitos SPs não dispõem de tempo ou recursos para implementar e aplicar a autenticação segura do usuário no login. Em geral, os IdPs estão melhor equipados para autenticar identidades de usuários. Ao delegar a autenticação ao IdP, o SAML viabiliza uma autenticação segura, capaz de aplicar várias camadas de segurança, como MFA.
Experiência do usuário aprimorada: Com o SAML, os usuários podem se despedir das dificuldades de tentar lembrar múltiplos nomes de usuário e senhas.
Redução da sobrecarga de gerenciamento: Os provedores de serviços podem melhorar a segurança de sua plataforma sem a necessidade de armazenar senhas. Problemas como senhas esquecidas deixam de existir, o que reduz custos e libera as equipes técnicas para lidar com outras solicitações mais urgentes.
O que é Auth0 e qual sua relação com a autenticação SAML?
Auth0 é uma plataforma que fornece serviços de autenticação e autorização de usuários, atuando tanto como IdP quanto SP. O Auth0 oferece um login universal que pode ser integrado ao SAML. Desenvolvedores frequentemente utilizam o Auth0 com SAML para diversificar o risco, utilizando múltiplos IdPs.
O Auth0 é compatível com praticamente todas as principais linguagens e APIs, e pode ser integrado a provedores de redes sociais, bancos de dados e diretórios LDAP.
Fluxo do SSO com SAML
Um dos principais objetivos do SAML é permitir o login único (SSO). Antes do surgimento do SAML, o SSO era possível, mas dependia de cookies e era viável somente no mesmo domínio.
O SAML possibilita o SSO, permitindo que os usuários acessem diversos aplicativos com um único login e credenciais. O SAML não é uma tecnologia recente, existindo desde 2002, e muitos novos aplicativos e empresas de SaaS têm adotado o SAML para SSO. Sua versão mais atual, SAML 2.0, permite SSO entre domínios baseados na web e é o padrão para autorização de recursos.
Na prática, isso implica que a autenticação do usuário é solicitada apenas uma vez, mesmo quando ele está usando aplicativos diferentes. Um exemplo é a autenticação do Google, compartilhada entre os diversos serviços como Gmail, YouTube e Google Apps.
Nesse modelo de funcionamento, o Google atua como provedor de identidade (IdP) para seus serviços, os quais são chamados de “provedores de serviços” (SP).
Autenticação
Ao se conectar a um aplicativo externo, o usuário desconhecido é direcionado ao IdP corporativo, um serviço web acessível via HTTPS, que pode ser hospedado internamente ou externamente.
Autenticação Interna
O usuário então comprova sua identidade para o IdP. Essa fase pode ser realizada por meio de autenticação explícita (login/senha) ou através da propagação de um token preexistente.
Geração da Asserção
O IdP gera um “token”, um tipo de carteira de identidade do usuário, válida somente para o serviço solicitado e por um período determinado. Nesse token, encontramos:
- A identidade do usuário: login, e-mail ou outros campos
- Atributos adicionais opcionais: sobrenome, nome, idioma, etc.
- Um período de validade do token
- A assinatura do token pelo IdP
Transmissão de IdP para SP
No modo mais comum, a asserção não é enviada diretamente do IdP para o SP, mas sim pelo próprio usuário. Através de um mecanismo de redirecionamento HTTP, o IdP envia ao navegador do cliente o token para que ele o transmita ao provedor de serviços. É análogo a uma carteira de identidade emitida por uma prefeitura para ser apresentada a qualquer autoridade.
Consumo do Token pelo SP
O provedor de serviços recebe o token do usuário. O SP escolheu confiar nesse IdP, validando a assinatura e a integridade do token, bem como seu período de validade. Se os testes forem bem-sucedidos, o SP abre uma sessão para o usuário.
Fonte: Wikipédia
Autenticação SAML vs. Autorização do Usuário
Frequentemente, a autenticação SAML é confundida com autorização. Para evitar confusões, é crucial diferenciar os conceitos de autenticação e autorização.
Autenticação: É a validação da identidade do usuário, ou seja, a verificação de que ele é quem afirma ser. Um exemplo é o uso de e-mail e senha para acessar um sistema, estabelecendo uma única sessão ou login para outras plataformas.
Autorização: Refere-se às permissões que o usuário concede a uma ferramenta de terceiros para acessar recursos em sua conta. Com a aprovação do usuário, o protocolo de autorização realiza a troca de tokens sem ter acesso direto às suas credenciais. Um exemplo comum é permitir que uma plataforma, como o Facebook, acesse certas informações da sua conta do Google.
Terminologias Essenciais do SAML
Declaração SAML
As declarações SAML são tipicamente enviadas de provedores de identidade para provedores de serviços e contêm informações que os provedores de serviços usam para tomar decisões de controle de acesso. Existem três tipos de declarações:
- As declarações de autenticação indicam que o provedor de serviços foi efetivamente autenticado junto ao provedor de identidade em um momento específico e usando um método de autenticação específico.
- Uma declaração de atributo estabelece que um sujeito está associado a certos atributos, sendo um atributo um simples par nome-valor. As partes confiáveis usam esses atributos para tomar decisões de controle de acesso.
- Uma declaração de decisão autorizada afirma que um sujeito está autorizado a agir em um recurso, apresentando as evidências necessárias. A capacidade de expressão dos estados de decisão de autorização no SAML é deliberadamente limitada.
Serviço de Consumo de Asserção
O Assertion Consumer Service (ACS) é o ponto para onde o provedor de identidade redireciona o usuário após a resposta de autenticação. O endpoint de redirecionamento é um ponto HTTPS que transfere informações pessoais.
Estado de Retransmissão Padrão
É a URL padrão para onde o usuário será redirecionado após a autenticação da mensagem SAML. O Default Relay State é usado para coordenar mensagens entre IdPs e SPs.
O SAML é um protocolo amplamente utilizado, e muitas vezes é necessário decodificar as asserções SAML. Abaixo, estão algumas das melhores ferramentas SAML para codificação, decodificação e formatação de mensagens e declarações SAML:
#1. SAMLtool
SAMltool, da OneDesign, é um conjunto de ferramentas e kits de ferramentas SAML online, incluindo diversas ferramentas para codificar e decodificar mensagens SAML, criptografar e descriptografar declarações, e assinar e validar mensagens e declarações SAML. O SAMLtool também oferece vários plugins para integrar essas ferramentas com diversos CMS.
#2. Samtool.io
Oferecido pela Auth0, samltool.io é uma ferramenta online que permite decodificar, inspecionar e verificar mensagens e declarações SAML simplesmente colando XML bruto ou URLs que contêm solicitações.
#3. Decodificador SAM
Decodificador SAM é uma ferramenta online oferecida pela PingIdentity para decodificar SAML. O decodificador SAM pode ser usado para decodificar, inflar e formatar mensagens, declarações e metadados SAML.
Considerações Finais
O padrão SAML é extremamente útil para implementar um sistema de autenticação centralizado baseado em linguagem de marcação. Uma de suas grandes vantagens é a eficiência e o alto padrão de segurança.
Em particular, o número de possíveis brechas de segurança é reduzido, já que os aplicativos individuais não necessitam armazenar ou sincronizar dados de usuário. Dessa forma, um dos principais objetivos é alcançado: conciliar um alto nível de segurança com a máxima facilidade de uso.
Recomenda-se também explorar algumas das melhores plataformas de autenticação de usuários disponíveis.