SAML vs inicio de sesión federado con OAuth

100

¿Cuál es la diferencia entre SAML y el inicio de sesión federado con OAuth? ¿Qué solución tiene más sentido, si una empresa desea utilizar una aplicación web de terceros, pero también quiere iniciar sesión única y ser la autoridad de autenticación?

Chung Wu
fuente

Respuestas:

128

Resuelven diferentes problemas.

SAML es un conjunto de estándares que se han definido para compartir información sobre quién es un usuario, cuál es su conjunto de atributos y brindarle una forma de otorgar / denegar acceso a algo o incluso solicitar autenticación.

OAuth se trata más de delegar el acceso a algo. Básicamente, estás permitiendo que alguien "actúe" como tú. Se usa más comúnmente para otorgar acceso a API que pueden hacer algo en su nombre.

Son dos cosas completamente distintas.


Algunos ejemplos que pueden ayudar.

OAuth piensa en un twitter. Supongamos que está utilizando Google Buzz y Twitter, y desea escribir una aplicación para poder mantener los dos sincronizados. Básicamente, puede establecer confianza entre su aplicación y Twitter. La primera vez que va a vincular la aplicación a Twitter, hace el mensaje clásico para iniciar sesión en Twitter, y luego aparece el cuadro de confirmación y pregunta "¿Le gustaría otorgar acceso a« el nombre de su aplicación »?" una vez que haga clic en "sí", se habrá establecido la confianza y ahora su aplicación puede actuar como usted en Twitter. Puede leer sus publicaciones, así como crear otras nuevas.

SAML: para SAML, piense en algún tipo de "acuerdo" entre dos sistemas de membresía no relacionados. En nuestro caso podemos utilizar US Airways y Hertz. No existe un conjunto compartido de credenciales que pueda llevarlo de un sitio a otro, pero digamos que Hertz quiere ofrecer un "trato" a US Airways. (De acuerdo, sé que este es un ejemplo extremo, pero tengan paciencia conmigo). Después de comprar un vuelo, ofrecerán un coche de alquiler gratuito a sus miembros presidentes. US Airways y Hertz establecerían alguna forma de confianza y alguna forma de identificar al usuario. En nuestro caso, nuestra "identificación federada" sería la dirección de correo electrónico, y sería un conjunto de confianza unidireccional. Hertz confía en que el proveedor de identidad de US Airways entregará un token que sea preciso y seguro. Después de reservar el vuelo, el proveedor de identidad de US Airways generará un token y completará cómo han autenticado al usuario, así como los "atributos" de la persona; en nuestro caso, el atributo más importante sería su nivel de estatus en US Airways. Una vez que se ha llenado el token, lo pasa a través de algún tipo de referencia, o se codifica en una url y una vez que llegamos a Hertz, mira el token, lo valida y ahora puede permitir el alquiler gratuito del auto.

El problema con este ejemplo de SAML es que es solo un caso de uso especializado entre muchos. SAML es un estándar y hay casi demasiadas formas de implementarlo.


Alternativamente, si no le importa la autorización, casi podría argumentar que afirmar la autenticación a través de SAML y OpenID .

Nada
fuente
4
Todavía no entiendo la diferencia. "conceder / denegar acceso" y "conceder acceso a api" suenan como lo mismo para mí. ¿Puede dar 2 ejemplos que sean más similares, para que pueda ver las diferencias? Por ejemplo, ¿por qué no pudimos usar SAML para establecer confianza entre tu aplicación y Twitter? ¿O por qué no pudo usar OAuth para Hertz para informar a USAirways sobre la oferta especial?
Tim Cooper
3
Lo entiendo, pero siempre puedo hacer SSO con OAuth (solicitando acceso a una API que proporciona identidad). ¿Eso significa que OAuth puede hacer todo lo que SAML puede y más?
Dirk
@Dirk, casi tiene razón, es decir, podemos obtener la identidad del usuario utilizando OAuth y, al igual que muchas aplicaciones, solicitan iniciar sesión a través de Google, Facebook, GitHub para obtener la identidad del usuario y otros atributos que les permitan ingresar a sus aplicaciones. Pero es cierto que podemos lograr más que obtener identidad usando OAuth.
chirag soni
39

Eche un vistazo a esta sencilla explicación resumida aquí:

Mucha gente está confundida acerca de las diferencias entre SAML, OpenID y OAuth, pero en realidad es muy simple. Aunque existe cierta superposición, aquí hay una forma muy sencilla de distinguir entre los tres.

OpenID: inicio de sesión único para consumidores

SAML: inicio de sesión único para usuarios empresariales

OAuth: autorización de API entre aplicaciones

Para las personas que se sienten cómodas con los patrones de diseño OO, creo que hay un buen corolario para los patrones de envoltura . Piense en los patrones de fachada , decorador y proxy . Básicamente, todos son iguales, solo son envoltorios ... La diferencia es la intención de cada patrón .

De manera similar, SAML, OAuth y OpenID facilitan diferentes intenciones a través de un mecanismo subyacente común , que es la redirección a un proveedor de servicios / autoridad de identidad para alguna interacción privada, seguida de la redirección a la aplicación de terceros de origen.

Si mira a su alrededor en la red, encontrará una superposición entre las capacidades de los protocolos. La autenticación a través de OAuth es perfectamente razonable. Sin embargo, es posible que SSO sobre OAuth no tenga mucho sentido, ya que SAML y OpenID están específicamente orientados a la identidad federada.

Para la pregunta en sí, en un contexto corporativo, SAML suena más apropiado que OAuth para SSO . Apuesto a que si observa las aplicaciones de terceros que le gustaría integrar con sus identidades corporativas, encontrará que ya están diseñadas para integrarse con SAML / LDAP / Radius, etc. IMO OAuth es más apropiado para la interacción de Internet. entre aplicaciones o quizás aplicaciones que comprenden una Arquitectura Orientada a Servicios en un gran entorno corporativo.

Las reglas de autorización también se pueden especificar en un entorno corporativo de otras formas. LDAP es una herramienta común para esto. Organizar a los usuarios en grupos y asociar los privilegios de la aplicación a la pertenencia a grupos es un enfoque generalizado. Da la casualidad de que LDAP también se puede utilizar para la autenticación. Active Directory es un gran ejemplo, aunque prefiero OpenLDAP.

quickshiftin
fuente
1
Gracias por actualizar el enlace @Sundeep
quickshiftin
Enlace actualizado, sin embargo, el resumen que ya estaba en la respuesta es el mismo.
quickshiftin
OpenID se basa únicamente en oAuth. oAuth no admite la interfaz de usuario por sí misma. OpenId lo hace por nosotros. No hay otra diferencia entre oAuth y OpenID
es una trampa
@ It'satrap no es cierto; OpenID sobre autenticación, OAuth sobre autorización, sin embargo, comparten un mecanismo similar (redireccionamiento del navegador). Tampoco tiene mucho que ver con una interfaz de usuario ... Consulte esta respuesta también. También puedes mirar aquí . También puede volver a leer mi respuesta para obtener más aclaraciones, jaja.
quickshiftin
1
@ It'satrap Es posible que desee ver la " autenticación construida sobre OAuth 2.0" de OpenId Spec ; y también la especificación OAuth 2.0 "El marco de autorización OAuth 2.0 " ... Una vez más, uno está diseñado para la autenticación , el otro para la autorización . Aprovechar el último para el primero está bien, ya que comparten un paradigma subyacente común (por tercera o cuarta vez lo he dicho jajaja). Todo resumido en mi respuesta sin cambios. Deberías aprender a leer hermano.
quickshiftin
3

Encontré un buen artículo aquí

ingrese la descripción de la imagen aquí

SAML (Security Assertion Markup Language) es un conjunto de estándares para lograr el inicio de sesión único (SSO), la federación y la administración de identidades.

Ejemplo : un usuario (principal) se autentica con un sitio web de reserva de vuelos, AirFlyer (proveedor de identidad) que ha configurado el SSO a través de SAML con un sitio web de reserva de transporte, Shuttler (proveedor de servicios). Una vez autenticado en Flyer, el usuario puede reservar traslados en Shuttler sin requerir autenticación

OAuth (Autorización abierta) es un estándar para la autorización de recursos. No se ocupa de la autenticación.

Ejemplo : una aplicación móvil para compartir fotos (consumidor OAuth) que permite a los usuarios importar fotos desde su cuenta de Instagram (proveedor OAuth) que envía un token o clave de acceso temporal a la aplicación para compartir fotos que caduca después de algunas horas.

pk_code
fuente
2

SAML tiene una variedad de "perfiles" para elegir que permiten a otros usuarios "iniciar sesión" en su sitio. SAML-P o SAML Passive es muy común y bastante simple de configurar. WS-Trust es similar y también permite la federación entre sitios web.

OAuth está diseñado para autorización. Puede leer más aquí:

¿Cuál es la diferencia entre OpenID y OAuth?

goodguys_activate
fuente
Me cuesta entender la diferencia entre "iniciar sesión" y "autorizar". ¿Puede dar un ejemplo que ilustre la diferencia?
Tim Cooper
@TimCooper "login" es una terminología suelta para la autenticación, mientras que "autorizar" es una buena autorización ... Un ejemplo según su solicitud
quickshiftin
1
@quickshiftin Está bien, entiendo esa distinción. Su respuesta parece implicar que SAML realiza la autenticación mientras que OAuth hace la autorización. ¿Es eso correcto? ¿O ambos hacen ambas cosas? (En cuyo caso todavía no sé cuál es la diferencia).
Tim Cooper
1
@TimCooper Los protocolos tienen algunas capacidades superpuestas. OAuth está dirigido a la autorización, pero también admite la autenticación . El SSO en un contexto corporativo es algo para lo que SAML está diseñado específicamente. Por otro lado, SAML también admite la autorización. El contexto es el factor más importante a la hora de decidir qué tecnología utilizar. El año pasado escribí una extensión para Expression Engine que usaba SimpleSAMLPhp para autenticar a los usuarios contra un backend de Kerberos y luego buscar reglas de autorización desde un sistema LDAP. ¡Es un mundo loco ahí fuera!
quickshiftin
2

Manejan un caso de uso sutil

  • SAML: compartir credenciales (por ejemplo, SSO) de un usuario con varios proveedores de servicios (por ejemplo, web o servicio web)
  • OAuth: un usuario que delega una aplicación para acceder a un recurso en nombre de su
yudis
fuente