Como parte del proyecto PicketLink (http://www.picketlink.org ), me hacen preguntas sobre varios aspectos de la seguridad, la confianza y la gestión de identidades.
Una de las principales preguntas que me hacen es – «¿Cuál es la diferencia entre SAML y OAuth?». Espero poder utilizar este artículo para proporcionar mis pensamientos sobre este importante tema. También intentaré señalar varios casos de uso en los que se prefiere cada uno.
¿Cuál es la gran diferencia entre SAML y OAuth?
Informalmente en mis propias palabras:
SAML (Security Assertion Markup Language) es un estándar paraguas que engloba perfiles, bindings y construcciones para conseguir Single Sign On (SSO), Federation y Identity Management.
OAuth (Open Authorization) es un estándar para la autorización de recursos. No se ocupa de la autenticación.
Para las definiciones formales,
Según la página de wikipedia sobre SAML:
Security Assertion Markup Language es un formato de datos estándar abierto basado en XML para el intercambio de datos de autenticación y autorización entre las partes, en particular, entre un proveedor de identidad y un proveedor de servicios.
Según OAuth.net
Un protocolo abierto para permitir la autorización segura en un método simple y estándar desde aplicaciones web, móviles y de escritorio.
¿Cuáles son las otras diferencias?
1. Formato de token o mensaje<
SAML trata de XML como la construcción de datos o formato de token.
Los tokens OAuth pueden ser binarios, JSON o SAML como se explica en OAuth Bearer Tokens.
2. Transporte
SAML tiene Bindings que utilizan HTTP como HTTP POST Binding, HTTP REDIRECT Binding etc.
Pero no hay ninguna restricción en el formato de transporte. Puedes utilizar SOAP o JMS o cualquier transporte que quieras utilizar para enviar tokens o mensajes SAML.
OAuth utiliza HTTP exclusivamente.
3. Ámbito de aplicación
Aunque SAML fue diseñado para ser aplicable de forma abierta, se suele utilizar en escenarios de SSO empresarial –
- dentro de una empresa o
- de empresa a socio o
- de empresa a nube.
- Si su caso de uso implica SSO (cuando al menos un actor o participante es una empresa), entonces utilice SAML.
- Si su caso de uso implica proporcionar acceso (temporal o permanente) a recursos (como cuentas, imágenes, archivos, etc.), entonces utilice OAuth.
- Si necesita proporcionar acceso a una aplicación de socio o cliente a su portal, entonces utilice SAML.
- Si su caso de uso requiere una fuente de identidad centralizada, entonces utilice SAML (proveedor de identidad).
- Si su caso de uso implica dispositivos móviles, entonces OAuth2 con alguna forma de tokens portadores es apropiado.
- Proyecto de código abierto PicketLink en http://www.picketlink.org
- Teoría OAuth en el sitio PicketLink.
- Grupo de Trabajo de Autorización Web del IETF (http://datatracker.ietf.org/wg/oauth/charter/)
- IETF OAuth2 (http://datatracker.ietf.org/doc/rfc6749/)
- Documento OAuth de Google (https://developers.google.com/accounts/docs/OAuth2)
- Documento OAuth2 de Microsoft Windows Live (http://msdn.microsoft.com/en-us/library/live/hh243647.aspx)
- Servicios web de Amazon y SAML http://aws.typepad.com/aws/2013/11/aws-identity-and-access-management-using-saml.html
- Salesforce SAML. https://help.salesforce.com/apex/HTViewHelpDoc?id=sso_saml.htm&language=en
- Google Apps SAML. https://developers.google.com/google-apps/sso/saml_reference_implementation
- OpenID Connect http://openid.net/specs/openid-connect-basic-1_0-22.html
OAuth ha sido diseñado para su uso con aplicaciones en Internet, principalmente para la autorización delegada de recursos de Internet. OAuth ha sido diseñado para la escala de Internet.
¿Qué versiones de los estándares debo utilizar?
SAML v2.0 y OAuth v2.0 son las últimas versiones de los estándares.
¿Cuándo debo utilizar cuáles?
Quiero utilizar tanto SAML como OAuth. ¿Puedo?
Puedes utilizar SAML para la autenticación. Una vez que tenga un token/afirmación SAML, puede utilizarlo como token de portador OAuth en el encabezado de portador HTTP para acceder a los recursos protegidos.
Recientemente, hemos tenido un requerimiento de la comunidad de PicketLink en este sentido.
https://docs.jboss.org/author/display/PLINK/REST+Service+to+convert+SAML+Tokens+Into+OAuth+Tokens
¿Cuál es la alternativa a los tokens SAML XML en el mundo de OAuth?
Mira el token web JSON (JWT): https://datatracker.ietf.org/doc/draft-ietf-oauth-json-web-token/
Los tokens de portador JWT se pueden utilizar con OAuth2.
Se está trabajando en la fundación OpenID con OpenID Connect. http://openid.net/specs/openid-connect-basic-1_0-22.html
OpenID Connect es una capa de identidad sobre OAuth2 que puede proporcionar información de perfil de los usuarios desde los servidores de autorización (en base a la autenticación que ha realizado).