Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Saml 1
Saml 1
1
Ir a la navegaciónIr a la búsqueda
El Lenguaje de Marcado para Confirmaciones de Seguridad (SAML) es un
estándar de XML para intercambiar datos de autenticación y de autorización.
SAML es un producto de la organización OASIS (Comité técnico de Servicios
de Seguridad)
SAML 1.1 fue ratificado como un estándar de OASIS en septiembre del año
2003. Los aspectos críticos de SAML 1.1 están cubiertos en detalle en los
documentos oficiales SAMLCore1 and SAMLBind.2 Para empezar a aprender
sobre SAML se debe leer primero la introducción a SAML, y después el
documento SAMLOverview de OASIS.
Con anterioridad a SAML 1.1, SAML 1.0 fue adoptado como un estándar de
OASIS en noviembre de 2002. SAML ha experimentado una actualización
menor (V1.1) y una actualización importante (V2.0) desde la versión V1.0, que
es un protocolo relativamente sencillo. SAML 1.0 ha adquirido mayor
importancia, sin embargo, desde que la Iniciativa de Autentificación del
gobierno federal estadounidense ha adoptado SAML 1.0 cuando como su
tecnología principal.
Las versiones 1.0 y 1.1 de SAML son similares. Consulta SAMLDiff para ver las
diferencias específicas entre los dos estándares. Este artículo se centra en
SAML 1.1 ya que es un estándar importante del que muchos otros estándares
e implementaciones dependen.
Aviso: Los ejemplos de código de este artículo sirven sólo como ilustraciones y
pueden no cumplir la norma. Para conocer los requerimientos de la normativa
consultar las especificaciones de OASIS SAML .
Índice
<saml:Assertion
xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
MajorVersion="1" MinorVersion="1"
AssertionID="buGxcG4gILg5NlocyLccDz6iXrUa"
Issuer="https://idp.example.org/saml"
IssueInstant="2002-06-19T17:05:37.795Z">
<saml:Conditions
NotBefore="2002-06-19T17:00:37.795Z"
NotOnOrAfter="2002-06-19T17:10:37.795Z"/>
<saml:AuthenticationStatement
AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password"
AuthenticationInstant="2002-06-19T17:05:17.706Z">
<saml:Subject>
<saml:NameIdentifier
Format="urn:oasis:names:tc:SAML:1.1:nameid-
format:emailAddress">
useridp.example.org
</saml:NameIdentifier>
<saml:SubjectConfirmation>
<saml:ConfirmationMethod>
urn:oasis:names:tc:SAML:1.0:cm:bearer
</saml:ConfirmationMethod>
</saml:SubjectConfirmation>
</saml:Subject>
</saml:AuthenticationStatement>
</saml:Assertion>
<saml:Assertion
xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
MajorVersion="1" MinorVersion="1"
Issuer="https://idp.example.org/saml" ...>
<saml:Conditions NotBefore="..." NotAfter="..."/>
<saml:AuthenticationStatement
AuthenticationMethod="..."
AuthenticationInstant="...">
<saml:Subject>...</saml:Subject>
</saml:AuthenticationStatement>
<saml:AttributeStatement>
<saml:Subject>...</saml:Subject>
<saml:Attribute
AttributeName="urn:mace:dir:attribute-
def:eduPersonAffiliation"
AttributeNamespace="urn:mace:shibboleth:1.0:attributeNamespace:uri">
<saml:AttributeValue>member</saml:AttributeValue>
<saml:AttributeValue>student</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>
</saml:Assertion>
Los atributos son a menudo obtenidos de un directorio LDAP, por lo tanto las
representaciones consistentes de los atributos a través de dominios de
seguridad es crucial. En el ejemplo superior que muestra cómo un estudiante
podría obtener acceso a una aplicación de becas, el proveedor de servicio tiene
dos papeles, uno como punto de aplicación de la norma (policy enforcement
point) y el otro como punto de decisión de la norma (policy decision point). En
ocasiones, es preferible asociar el punto de decisión de la norma al proveedor
de identidad. En tal caso, el proveedor de servicio pasa un URI al proveedor de
identidad, que entonces envía una declaración de decisión de la
autorización que determina si el rol principal tiene o no acceso al recurso
protegido en el URI facilitado.
<saml:Assertion
xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
MajorVersion="1" MinorVersion="1"
Issuer="https://idp.example.org/saml" ...>
<saml:Conditions .../>
<saml:AuthorizationDecisionStatement
Decision="Permit"
Resource="https://sp.example.com/confidential_report.html">
<saml:Subject>...</saml:Subject>
<saml:Action>read</saml:Action>
</saml:AuthorizationDecisionStatement>
</saml:Assertion>
Los tres tipos de declaración no son mutuamente exclusivos. Por ejemplo, tanto
las declaraciones de autenticación como las declaraciones de atributo pueden
ser incluidas en una única aserción (cómo se muestra en el ejemplo superior).
Esto evita que el proveedor de servicio tenga que realizar múltiples consultas
del al proveedor de identidad. El protocolo SAML es del tipo petición-respuesta.
Un requester de SAML envía un elemento de Petición SAML a un responder:
<samlp:Request
xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
MajorVersion="1" MinorVersion="1"
RequestID="aaf23196-1773-2113-474a-fe114412ab72"
IssueInstant="2006-07-17T22:26:40Z">
<!-- insert other SAML elements here -->
</samlp:Request>
<samlp:Response
xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
MajorVersion="1" MinorVersion="1"
ResponseID="b07b804c-7c29-ea16-7300-4f3d6f7928ac"
InResponseTo="aaf23196-1773-2113-474a-fe114412ab72"
IssueInstant="2006-07-17T22:26:41Z">
<!-- insert other SAML elements here, including assertions -->
</samlp:Response>
SOAPAction: http://www.oasis-open.org/committees/security
1. Perfil Browser/POST
2. Perfil Browser/Artifact
El Perfil Browser/POST se basa en una operación "push" que pasa una
aserción SSO por valor a través del navegador usando HTTP POST. Decimos
que el proveedor de identidad "pushes" la aserción al proveedor de servicio.
El Perfil Browser/Artifact emplea un mecanismo de "pull". Básicamente el perfil
envía una aserción SSO del proveedor de identidad al proveedor de
servicio por referencia (a través del navegador que utiliza HTTP Redirect), el
cual es posteriormente desreferenciado a través de un intercambio back-
channel (por ejemplo, el proveedor de servicio "pulls" la aserción del proveedor
de identidad utilizando SAML sobre SOAP sobre HTTP).
Estos perfiles soportan single sign-on (SSO) en distintos dominios. La
especificación no define perfiles adicionales. En particular, SAML 1.1 no
soporta un perfil para asegurar un mensaje de servicio web ni soporta un perfil
de logout único.
Ambos perfiles SAML 1.1 empiezan en el servicio de transferencia interno del
sitio web, que está gestionado por el proveedor de identidad. La forma en la
que el principal llega al servicio de transferencia en primer lugar no está
indicada por la especificación. Para ver los escenarios posibles consultar las
secciones 4.1 y 4.2 de SAMLOverview. En la práctica, un cliente que accede a
un recurso protegido en un proveedor de servicio será redirigido al servicio de
transferencia interno del sitio en el proveedor de identidad, pero la secuencia
precisa de pasos necesarios para cumplir esto no está indicada por SAML 1.1.
(Consultar la sección 4.3 de SAMLOverview para más información.) Este
escenario está exhaustivamente desarrollado en SAML 2.0.
Después de visitar el servicio de transferencia interno del sitio, el principal es
transferido al servicio de aserción del consumidor en el proveedor de servicio.
Los detalles de cómo el principal es transferido del servicio de transferencia
interno del sitio al servicio de aserción del consumidor dependen del perfil
utilizado. En el caso del Perfil Browser/Artifact, se usa una redirección; en el
caso del Perfil Browser/POST Profile, el cliente emite una petición de tipo
POST (con o sin intervención del usuario).
Para emitir un procesamiento por el servicio de aserción, se especifican dos
URLs distintas:
https://idp.example.org/TransferService?TARGET=target
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: nnnn
...
<form method="post" action="https://sp.example.com/ACS/POST" ...>
<input type="hidden" name="TARGET" value="target" />
<input type="hidden" name="SAMLResponse" value="''response''" />
...
<input type="submit" value="Submit" />
</form>
...
<samlp:Response
xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
MajorVersion="1" MinorVersion="1"
ResponseID="_P1YaA+Q/wSM/t/8E3R8rNhcpPTM="
IssueInstant="2002-06-19T17:05:37.795Z">
<ds:Signature
xmlns:ds="http://www.w3.org/2000/09/xmldsig#">...</ds:Signature>
<samlp:Status>
<samlp:StatusCode Value="samlp:Success"/>
</samlp:Status>
<saml:Assertion
xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
MajorVersion="1" MinorVersion="1"
AssertionID="buGxcG4gILg5NlocyLccDz6iXrUa"
Issuer="https://idp.example.org/saml"
IssueInstant="2002-06-19T17:05:37.795Z">
<saml:Conditions
NotBefore="2002-06-19T17:00:37.795Z"
NotOnOrAfter="2002-06-19T17:10:37.795Z"/>
<saml:AuthenticationStatement
AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password"
AuthenticationInstant="2002-06-19T17:05:17.706Z">
<saml:Subject>
<saml:NameIdentifier
Format="urn:oasis:names:tc:SAML:1.1:nameid-
format:emailAddress">
useridp.example.org
</saml:NameIdentifier>
<saml:SubjectConfirmation>
<saml:ConfirmationMethod>
urn:oasis:names:tc:SAML:1.0:cm:bearer
</saml:ConfirmationMethod>
</saml:SubjectConfirmation>
</saml:Subject>
</saml:AuthenticationStatement>
</saml:Assertion>
</samlp:Response>
https://idp.example.org/transferservice?Objetivo=de OBJETIVO
https://sp.example.com/acs/artifact?Objetivo=de
OBJETIVO&SAMLart=artefacto
HTTP/1.1 200 OK
Content-Type: text/xml
Content-Length: nnnn
<SOAP-ENV:Envelope
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header/>
<SOAP-ENV:Body>
<samlp:Response
xmlns:samlp="urn:oasis:names:tc:SAML:1.0:protocol"
MajorVersion="1" MinorVersion="1"
ResponseID="_P1YaA+Q/wSM/t/8E3R8rNhcpPTM="
InResponseTo="_192.168.16.51.1024506224022"
IssueInstant="2002-06-19T17:05:37.795Z">
<samlp:Status>
<samlp:StatusCode Value="samlp:Success"/>
</samlp:Status>
<saml:Assertion
xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion"
MajorVersion="1" MinorVersion="1"
AssertionID="buGxcG4gILg5NlocyLccDz6iXrUa"
Issuer="https://idp.example.org/saml"
IssueInstant="2002-06-19T17:05:37.795Z">
<saml:Conditions
NotBefore="2002-06-19T17:00:37.795Z"
NotOnOrAfter="2002-06-19T17:10:37.795Z"/>
<saml:AuthenticationStatement
AuthenticationMethod="urn:oasis:names:tc:SAML:1.0:am:password"
AuthenticationInstant="2002-06-19T17:05:17.706Z">
<saml:Subject>
<saml:NameIdentifier
Format="urn:oasis:names:tc:SAML:1.1:nameid-
format:emailAddress">
useridp.example.org
</saml:NameIdentifier>
<saml:SubjectConfirmation>
<saml:ConfirmationMethod>
urn:oasis:names:tc:SAML:1.0:cm:artifact
</saml:ConfirmationMethod>
</saml:SubjectConfirmation>
</saml:Subject>
</saml:AuthenticationStatement>
</saml:Assertion>
</samlp:Response>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
En este caso, la declaración de autenticación incluye
un NameIdentifier conteniendo la dirección de correo electrónico del principal.
Respuesta a la petición del principal[editar]
El Servicio de aserción del consumidor parsea el elemento SAML Respuesta ,
crea un contexto de seguridad en el proveedor de servicio y redirige el agente
de usuario al recurso objetivo.