SAML vs login federado com OAuth


100

Qual é a diferença entre SAML e login federado com OAuth? Qual solução faz mais sentido, se uma empresa quiser usar um webapp de terceiros e também quiser o logon único e ser a autoridade de autenticação?

Respostas:


128

Eles resolvem problemas diferentes.

SAML é um conjunto de padrões que foram definidos para compartilhar informações sobre quem é um usuário, quais são seu conjunto de atributos e fornecer a você uma maneira de conceder / negar acesso a algo ou até mesmo solicitar autenticação.

OAuth é mais sobre delegar acesso a algo. Basicamente, você está permitindo que alguém "aja" como você. É mais comumente usado para conceder APIs de acesso que podem fazer algo em seu nome.

São duas coisas completamente diferentes.


Alguns exemplos que podem ajudar.

OAuth pense em um twitter. Digamos que você esteja usando o Google Buzz e o Twitter e queira escrever um aplicativo para poder manter os dois sincronizados. Você basicamente pode estabelecer confiança entre seu aplicativo e o Twitter. A primeira vez que você vincula o aplicativo ao Twitter, executa o prompt clássico para fazer login no Twitter e, em seguida, aquela caixa de confirmação aparece e pergunta "Você gostaria de conceder acesso ao« nome do seu aplicativo »?" depois de clicar em "sim", a confiança foi estabelecida e agora seu aplicativo pode atuar como você no Twitter. Ele pode ler suas postagens, bem como fazer novas.

SAML - Para SAML pense em algum tipo de "acordo" entre dois sistemas de associação não relacionados. No nosso caso, podemos usar US Airways e Hertz. Não há um conjunto compartilhado de credenciais que possa levá-lo de um site para outro, mas digamos que a Hertz deseja oferecer um "acordo" com a US Airways. (Concedido eu sei que este é um exemplo extremo, mas tenha paciência comigo). Depois de comprar um vôo, eles vão oferecer um carro alugado gratuitamente para seus membros do presidente. A US Airways e a Hertz estabeleceriam alguma forma de confiança e alguma forma de identificar o usuário. Em nosso caso, nosso "ID federado" seria o endereço de e-mail, e seria um conjunto de confiança que a Hertz confia que o provedor de identidade da US Airways entregará um token preciso e seguro. Depois de reservar o voo, o provedor de identidade da US Airways geraria um token e preencheria como eles autenticaram o usuário, bem como "atributos" sobre a pessoa em nosso caso, o atributo mais importante seria seu nível de status na US Airways. Depois que o token é preenchido, ele passa por algum tipo de referência ou é codificado em uma url e, quando chegamos ao Hertz, ele olha o token, valida-o e agora pode permitir o aluguel de carro gratuitamente.

O problema com este exemplo SAML é que ele é apenas um caso de uso especializado entre muitos. SAML é um padrão e há muitas maneiras de implementá-lo.


Como alternativa, se você não se preocupa com a autorização, quase poderia argumentar que afirmar a autenticação via SAML e OpenID .


4
Eu ainda não entendi a diferença. "conceder / negar acesso" e "conceder acesso à API" parecem a mesma coisa para mim. Você pode dar 2 exemplos que são mais semelhantes, para que eu possa ver as diferenças? Por exemplo, por que não podemos usar o SAML para estabelecer confiança entre seu aplicativo e o Twitter? Ou por que você não pode usar o OAuth para Hertz para informar a USAirways sobre a oferta especial?
Tim Cooper

3
Eu meio que entendi, mas sempre posso fazer SSO com OAuth (solicitando acesso a uma API que fornece identidade). Isso significa que o OAuth pode fazer tudo que o SAML pode e muito mais?
Dirk

@Dirk, você está quase certo, ou seja, podemos obter a identidade do usuário usando OAuth, assim como muitos aplicativos pedem login via Google, Facebook, GitHub para obter a identidade do usuário e outros atributos para permitir que ele entre em seus aplicativos. Mas é verdade que podemos alcançar mais do que apenas obter identidade usando OAuth.
chirag soni

39

Dê uma olhada nesta explicação simples resumida aqui:

Muitas pessoas ficam confusas sobre as diferenças entre SAML, OpenID e OAuth, mas na verdade é muito simples. Embora haja alguma sobreposição, aqui está uma maneira muito simples de distinguir entre os três.

OpenID - logon único para consumidores

SAML - logon único para usuários corporativos

OAuth - autorização de API entre aplicativos

Para quem está confortável com os padrões de projeto OO, acho que há um bom corolário para os padrões de empacotamento . Pense nos padrões Facade , Decorator e Proxy . Fundamentalmente, são todos iguais, são apenas invólucros ... A diferença é que intenção de cada padrão .

Da mesma forma, SAML, OAuth e OpenID facilitam diferentes intenções por meio de um mecanismo subjacente comum , que é o redirecionamento para um provedor de serviços / autoridade de identidade para alguma interação privada, seguido pelo redirecionamento para o aplicativo de origem de terceiros.

Olhando ao redor na rede, você encontrará sobreposição entre as capacidades dos protocolos. A autenticação via OAuth é perfeitamente razoável. SSO sobre OAuth pode não fazer muito sentido, já que SAML e OpenID são voltados especificamente para identidade federada.

Para a própria pergunta, em um contexto corporativo, SAML parece mais apropriado do que OAuth para SSO . Aposto que se você olhar os aplicativos de terceiros que gostaria de integrar com suas identidades corporativas, verá que eles já foram projetados para se integrar com SAML / LDAP / Radius etc. IMO OAuth é mais apropriado para interação com a Internet entre aplicativos ou talvez aplicativos que compreendem uma Arquitetura Orientada a Serviços em um grande ambiente corporativo.

As regras de autorização também podem ser especificadas em um ambiente corporativo de outras maneiras. O LDAP é uma ferramenta comum para isso. Organizar usuários em grupos e associar privilégios de aplicativo à associação de grupo é uma abordagem generalizada. Acontece que o LDAP também pode ser usado para autenticação. O Active Directory é um ótimo exemplo, embora eu prefira OpenLDAP.


1
Obrigado por atualizar o link @Sundeep
quickshift em

Link atualizado, porém o resumo que já constava da resposta é o mesmo.
quickshift em

OpenID é construído apenas em oAuth. oAuth não oferece suporte à interface de usuário por conta própria. OpenId faz isso por nós. Não há outra diferença entre oAuth e OpenID
É uma armadilha

@ It isatrap not true; OpenID sobre autenticação, OAuth é sobre autorização, no entanto, eles compartilham um mecanismo semelhante (redirecionamento do navegador). Nem tem muito a ver com uma IU ... Veja esta resposta também. Você também pode olhar aqui . Você também pode reler minha resposta para mais esclarecimentos haha.
quickshift em

1
@ Éatrap Você pode querer dar uma olhada no OpenId Spec " autenticação construída sobre OAuth 2.0"; e também a especificação OAuth 2.0 "A estrutura de autorização OAuth 2.0 " ... Novamente, um é projetado para autenticação , o outro para autorização . Aproveitar o posterior para o anterior está OK, pois eles compartilham um paradigma subjacente comum (pela 3ª ou 4ª vez, eu disse isso, lol). Tudo resumido na minha resposta inalterada. Você deve aprender a ler mano.
quickshift em

3

Bom artigo encontrado aqui

insira a descrição da imagem aqui

SAML (Security Assertion Markup Language) é um conjunto de padrões para alcançar Single Sign On (SSO), Federação e Gerenciamento de Identidade.

Exemplo : um usuário (principal) se autentica com um site de reserva de voo, AirFlyer (provedor de identidade), que tem SSO configurado via SAML com um site de reserva de transporte, Shuttler (provedor de serviço). Depois de autenticado no Flyer, o usuário pode reservar ônibus no Shuttler sem exigir autenticação

OAuth (Open Authorization) é um padrão para autorização de recursos. Não lida com autenticação.

Exemplo : Um aplicativo móvel de compartilhamento de fotos (consumidor OAuth) que permite aos usuários importar fotos de sua conta do Instagram (provedor OAuth) que envia um token de acesso temporário ou chave para o aplicativo de compartilhamento de fotos que expira após algumas horas.


2

SAML tem uma variedade de "perfis" para escolher, permitindo que outros usuários "façam login" em seu site. SAML-P ou SAML Passive é muito comum e bastante simples de configurar. O WS-Trust é semelhante e também permite a federação entre sites.

OAuth foi projetado para autorização. Você pode ler mais aqui:

Qual é a diferença entre OpenID e OAuth?


Tenho dificuldade em entender a diferença entre "fazer login" e "autorizar". Você pode dar um exemplo ilustrando a diferença?
Tim Cooper

@TimCooper "login" é uma terminologia flexível para autenticação, enquanto "autorizar" é uma boa autorização ... Um exemplo de acordo com sua solicitação
quickshift em

1
@quickshiftin Ok, eu entendo essa distinção. Sua resposta parece implicar que SAML faz autenticação, enquanto OAuth faz autorização. Isso é correto? Ou os dois fazem as duas coisas - (nesse caso, ainda não sei qual é a diferença).
Tim Cooper de

1
@TimCooper Os protocolos têm alguns recursos de sobreposição. OAuth é direcionado à autorização, mas também oferece suporte à autenticação . O SSO em um contexto corporativo é algo para o qual o SAML foi desenvolvido. Por outro lado, o SAML também oferece suporte para autorização. O contexto é o fator mais importante ao decidir qual tecnologia usar. No ano passado, escrevi uma extensão para o Expression Engine que usava SimpleSAMLPhp para autenticar usuários em um back-end Kerberos e, em seguida, pesquisar regras de autorização de um sistema LDAP. É um mundo louco lá fora!
quickshift em

2

Eles lidam com um caso de uso sutil

  • SAML - credencial de compartilhamento (por exemplo, SSO) de um usuário para vários provedores de serviço (por exemplo, web ou serviço da web)
  • OAuth - Um usuário que delega um aplicativo para acessar um recurso em seu nome


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.