É vital que uma empresa consiga escolher o sistema adequado para o processo de login dos seus usuários. Essa escolha impacta, entre outras questões, na segurança dos dados que ficam disponíveis, principalmente, àqueles que possuem acesso privilegiado. SAML e OAuth são alternativas para essa finalidade, porém com diferenças não tão bem conhecidas.
Neste artigo entenderemos o que distingue SAML e OAuth e quais são os cenários de uso mais adequados para cada um deles.
SAML
A sigla para o termo em inglês Security Assertion Markup Language pode ser associada a um esquema de autenticação que permite a realização de login em múltiplos sites, plataformas ou aplicações graças ao SSO (single sign on). É com base em asserções que a SAML também entrega dados em XML sobre os usuários, garantindo assim que os mesmos sejam devidamente autenticados. Resumidamente, estamos falando de um fluxo que tem como foco a confirmação de identidade.
Como é o funcionamento?
Agora vamos mapear a lógica por trás desse mencionado esquema. Para que a interação com a SAML seja bem sucedida, é necessário envolver não somente um provedor de serviço, mas também um provedor de identidade. Vamos supor que o provedor de serviço seja o Google. Se alguém tenta acessar o Gmail, por exemplo, isto é o que acontece:
- o Google envia uma solicitação de SAML para o navegador
- o navegador tenta se conectar com o provedor de identidade
- os dados credenciais do usuário são solicitados pelo serviço de SSO
- o usuários fornece os seus dados credenciais, nesse caso sendo e-mail e senha
- o provedor de identidade retorna com uma SAML para indicar o nível de acesso que o usuário tem direito
Se o usuário já foi autenticado, não há necessidade de fornecer os dados credenciais novamente em um posterior acesso. É neste ponto da jornada que SAML surge como um diferencial, economizando tempo investido em login.
Protocolo
Conforme mencionado, a função primordial de SAML é autenticar – ou seja, garantir que os usuários são quem alegam ser. Para que isso aconteça, o provedor de identidade retorna uma SAML para confirmar a identidade do usuário que está tentando se logar. Uma vez que os usuários não precisam criar nem manter credenciais para cada aplicação que usam, a experiência se torna muito mais fluida para perfis que se sentem incomodados com a concessão frequente de acesso.
O protocolo pode ser considerado eficaz para a realização de login único entre plataformas que funcionam separadamente, assim como o Jira (ferramenta que monitora e acompanha tarefas e projetos) e o Salesforce (software com enfoque em gerenciamento de relacionamentos) ou entre grandes plataformas de nuvem, assim como o Zendesk (software para otimizar o atendimento ao cliente).
OAuth
OAuth é um protocolo de autorização que concede a autenticação de uma aplicação dentro de outra. Quando o OAuth é acionado, o usuário que tenta realizar login é direcionado para servidor de autorização. Surge a já conhecida tela de login, mas que não vai garantir acesso direto à aplicação primária. Ao invés disso, ocorre o redirecionamento para que os dados do usuário sejam acessados.
Como é o funcionamento?
Não existe um único fluxo para o OAuth. Vamos conhecer 2 tipos:
- Concessão implícita depreciada
O usuário fornece as suas credenciais para que o servidor de autorização conceda o seu token de acesso e o redireciona para um URI (identificador uniforme de recurso).
- Concessão de de código de autorização
O servidor de autorização faz o redirecionamento do usuário novamente para a aplicação de origem por meio de um código no URI (identificador uniforme de recurso). A aplicação, por sua vez, solicita que o servidor de autenticação forneça um token de acesso, baseando-se em código e credenciais do usuário.
Protocolo
A função primordial de OAuth é agir como um sistema de autorização, determinando quais permissões são concedidas a cada perfil de usuário. Igualmente, esse protocolo outorga aos desenvolvedores a autenticação de usuários sem que as suas credenciais sejam exigidas.
Tal simplificação na experiência de login faz de OAuth a resposta ideal quando um aplicativo do tipo React está sendo desenvolvido, pois a concessão de acesso aos usuários acontece de maneira segura, não importa qual estrutura esteja sendo adotada.
Qual é a melhor escolha?
Não dá para determinar se OAuth é melhor que SAML e vice-versa. Tratam-se de soluções diferentes, mesmo que para problemas bastante parecidos. Todavia, vejamos um rápido raio-x de ambas as alternativas:
SAML
Indicada para organizações de grande porte, presenteando conveniência aos usuários que costumam acessar múltiplos serviços. A única ressalva está no uso do XML para entrega de dados, o que pode dificultar o emprego da linguagem.
OAuth
Indicado para aplicações mais modernas instaladas em mais de 1 dispositivo, pois é mais flexível e fácil de usar. Além disso, quando o OAuth é expandido para o chamado OpenID Connect (OIDC), baseado no OAuth2, tanto a autorização quanto a autenticação se tornam ainda mais seguras mediante a implementação de serviços terceirizados.