Login

SAML vs. OAuth

SAML e OAuth2 são protocolos padrão abertos projetados com objetivos diferentes, mas relacionados. Inicialmente, o SAML 2.0 foi projetado para autenticar um usuário, fornecendo assim os dados de identidade do usuário a um serviço. O OAuth 2.0 foi projetado como um protocolo de autorização permitindo que um usuário compartilhe o acesso a recursos específicos com um provedor de serviços.

SAML

SAML (Security Assertion Markup Language) é um protocolo bem estabelecido e seguro, usado extensivamente por empresas e governos para compartilhar dados de identidade. Esses dados usam estruturas de dados XML e SOAP ou HTTP simples para mecanismos de transporte de dados. Com SAML, um Provedor de Identidade (IdP) fornece dados do usuário (atributos, como nome, e-mail, etc.) quando solicitado por um serviço ou Parte Confiável (RP).

Como funciona o SAML?

Antes que qualquer transação de autenticação aconteça, a Parte Confiável (RP) e o Provedor de Identidade (IdP) precisam estabelecer uma relação de confiança. Essa relação é construída com a troca de alguns artefatos, como metadados, endpoints específicos, certificados de assinatura e criptografia, métodos de conexão suportados, etc.

Depois de estabelecidos, a RP que precisa da identidade de um usuário envia ao IdP um POST de formulário (ou redirecionamentos) com uma solicitação de autenticação, dentro de uma sessão de navegador da web. O IdP autentica o usuário final com um login interativo e retorna os dados de identidade correspondentes (conjunto de credenciais) em uma Resposta SAML por meio de um POST de formulário de volta à RP. Esses dados de identidade sempre incluirão um identificador que a RP pode usar para identificar o usuário. Como parte dessa interação, o IdP também pode configurar uma sessão de login único (SSO) para que as solicitações de autenticação de outras RPs possam ignorar a etapa de login interativo.

Se a RP exigir atributos adicionais, eles poderão ser solicitados no contexto da sessão de SSO, enviando uma Consulta de Atributo ao IdP.

Normalmente, as respostas SAML são assinadas digitalmente, para permitir a detecção de manipulação de dados em trânsito, e também podem ser criptografadas se a criptografia de transporte (HTTPS) for insuficiente.

OAuth 2.0

Publicado pela primeira vez em 2012, o OAuth 2.0, também conhecido como OAuth2, é um protocolo de autorização projetado para permitir que os usuários deem acesso aos seus recursos hospedados por um provedor de serviços, sem apresentar credenciais. A natureza dos recursos do usuário não está definida nas especificações do protocolo, e assim podem ser dados ou outras entidades. O OAuth2 possui um rico conjunto de recursos que permitem seu uso a partir de uma ampla variedade de dispositivos e aplicativos. Além disso, o OAuth2 é a base sobre a qual o OpenID Connect, um conhecido protocolo de autenticação, é construído.

Na terminologia do OAuth2, o serviço que requer acesso aos recursos dos usuários é o Cliente, e o serviço que pode fornecer esses recursos é o Servidor de recursos. O acesso aos recursos do usuário mantidos pelo servidor de recursos é controlado através do uso de tokens de acesso, artefatos que comprovam a autorização de acesso. Além disso, o OAuth2 fornece um mecanismo, chamado escopo, que limita as permissões no recurso de um usuário.

O sistema que autentica o usuário e, em última análise, responde com tokens de acesso é o Servidor de autorização.

Como o Oauth2 funciona?

Como o SAML, antes que o OAuth2 possa ser usado, o cliente e o servidor de recursos devem trocar alguns dados com o servidor de autorização. No mínimo, eles obtêm uma ID de cliente e um segredo do servidor de autorização e concordam com os endpoints a chamar para obter informações específicas.

O OAuth2 é muito flexível e fornece ao cliente uma série de fluxos, conhecidos como concessões, para obter um token de acesso. Qual concessão usar depende principalmente do tipo de cliente (aplicativo móvel, aplicativo nativo, cliente da web, etc.) e dos requisitos gerais de segurança. Talvez a mais usada seja a concessão do Código de Autorização, que se aplica quando o aplicativo cliente que precisa acessar o recurso de um usuário é um aplicativo da web comum. Abaixo está uma breve descrição das interações entre o cliente, o servidor de recursos e o servidor de autorização nesta concessão:

  1. O Cliente redireciona o usuário para o servidor de Autorização, solicitando autorização para acessar o recurso do usuário com escopos específicos.

  2. O servidor de autorização realiza um login interativo com o usuário, que também confirma que concede as permissões para os escopos especificados.

  3. O servidor de autorização redireciona o usuário para o endpoint do cliente com um código de autorização de uso único.

  4. O cliente autentica no servidor de autorização e troca o código de autorização por um token de acesso.

  5. Com o token de acesso, o cliente solicita o recurso do usuário do servidor de recursos.

Comparação entre OAuth2 e SAML

O SAML é compatível com o login único e também com a autorização por Consulta de Atributo. O OAuth é focado em autorização, mesmo que seja usado frequentemente em uma função de autenticação, por exemplo, no uso de login social, como "entrar com uma conta do Facebook". Independentemente disso, o OAuth2 não é compatível com SSO.

De um ponto de vista técnico, o SAML define um formato de token, sua criptografia é complicada e o tamanho das mensagens trocadas é significativo. Em comparação, o OAuth2 não usa nenhuma criptografia de mensagem (depende do HTTPS) e não define um formato de token.

O atrativo do OAuth2 está na facilidade de uso e flexibilidade: ele pode ser usado em dispositivos móveis, dispositivos inteligentes (por exemplo, TVs inteligentes), aplicativos da web, aplicativos de página única e assim por diante. Muitas bibliotecas estão disponíveis para facilitar o processo de integração com diferentes tipos de clientes e provedores de serviços. O SAML, em contraste, não foi projetado com esses aplicativos modernos em mente, dificultando o uso nesses sistemas. É comumente usado com aplicativos da web tradicionais.

Caso de uso de OAuth2 e SAML

O SAML é normalmente usado para SSO em aplicativos governamentais e corporativos (gestão de identidades), onde o processamento de back-end do XML é comum. Muitos esquemas governamentais de identificação de cidadãos (por exemplo, UK Verify) são baseados em SAML.

OAuth2 é amplamente utilizado em aplicativos corporativos e de consumidor, tanto em funções de autorização quanto de autenticação. Ele é normalmente usado para autorizar o acesso a APIs RESTful, onde o uso de tokens de acesso o torna simples e atraente.

Quer saber mais?

Continue lendo a Introdução ao IAM para conhecer outros tópicos sobre a Gestão de Identidades e Acesso.

Table of contents

Quick assessment

Ao autorizar o uso de APIs RESTful, qual protocolo é o melhor?

Quick assessment

Qual protocolo é uma boa opção para autorizar uma conta do YouTube em um aplicativo de TV inteligente?

Quick assessment

Você precisa escolher um protocolo que seja otimizado para login único (SSO). Qual é a melhor escolha?

Comece a construir gratuitamente