Actualmente, mi empresa desarrolla una aplicación web Java. Un par de nuestros clientes tienen servidores SAML internos (¿proveedores de identidad?) Y han solicitado que nos integremos con ellos. Recientemente he estado leyendo y jugando con OpenAM. Después de unos 3 días de esto, tengo una comprensión general del mismo, pero todavía hay algunas lagunas en mi conocimiento. Mi esperanza es que alguien pueda aclararme esto.
Así que así es como imagino el flujo de trabajo de un usuario que inicia sesión.
Definamos el servidor SAML de nuestros clientes como https://their.samlserver.com . Entonces, un usuario acude a nuestra aplicación web en busca de un recurso que está protegido. Digamos que la URL es http://my.app.com/something .
Entonces, si estoy en lo cierto, my.app.com es lo que SAML define como proveedor de servicios . Nuestra aplicación se da cuenta de que este usuario necesita iniciar sesión. A continuación, presentamos una página como esta al usuario ...
<script>JQuery Script to auto submit this form on ready</script>
<form method="post" action="https://their.samlserver.com/Post/Servlet">
<input type="hidden" name="SAMLRequest" value="someBase64Data" />
<input type="submit" value="Submit" />
</form>
Y esa someBase64Data
debería ser base64
una versión codificada de esto ...
<samlp:AuthnRequest
xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
ID="identifier_1"
Version="2.0"
IssueInstant="2004-12-05T09:21:59Z"
AssertionConsumerServiceIndex="0">
<saml:Issuer>http://my.app.com</saml:Issuer>
<samlp:NameIDPolicy
AllowCreate="true"
Format="urn:oasis:names:tc:SAML:2.0:nameid-format:transient"/>
</samlp:AuthnRequest>
Así que mi primer par de preguntas.
¿Cuál se supone que es el valor de ID ?
¿Y por qué puedo declararme Emisor ?
¿El proveedor de identidad me conoce? Tal vez este sea el círculo de confianza que he estado viendo en OpenAM . Y si sabe de mí, ¿cómo sabe de mí y qué necesita saber?
Entonces, una vez que se reenvía al usuario esa página, se lo lleva a una página proporcionada por el IDP https://their.samlserver.com . Se autentican en esa página y el IDP hace su magia para validar la autenticación y buscar al usuario. Una vez que la autenticación es exitosa, el IDP devuelve un <samlp:Response>
definido aquí .
Algunas preguntas más.
Primero, ¿cómo <samlp:Response>
puedo volver a mi aplicación web para poder verificarla?
¿Y qué debería buscar en esa respuesta para validar que fue exitosa? ¿Cómo se ve una falla?
Actualmente usamos la dirección de correo electrónico (LDAP) para identificar a los usuarios, por lo que probablemente lo tomaremos de la respuesta y lo usaremos de la misma manera que lo hacemos ahora. ¿Algo más que deba tener en cuenta en esa respuesta?
Entonces, ahora que hemos verificado la validez de esa respuesta, podemos otorgarle al usuario una sesión como lo hacemos actualmente. Pero cuando quieren cerrar la sesión, ¿existe un flujo de trabajo para eso? ¿Tengo que notificar al IDP que el usuario se ha ido?
Y finalmente, hay un par de temas que se han tratado en mi lectura y no estoy seguro de cómo encajan en este flujo de trabajo. Son Círculo de confianza , Fichas y Artefactos .
Gracias por la ayuda a todos. He encontrado mucha información en los últimos días, y es posible que pueda juntarlos después de jugar un poco más. Pero todavía tengo que encontrar un artículo de flujo de trabajo sencillo "Aquí está la publicación". Tal vez sea porque estoy equivocado sobre cómo funciona esto. Tal vez sea porque esto no es tan popular. Pero realmente quería asegurarme de tener el flujo de trabajo para no perderme un paso crucial en algo tan importante como la autenticación del usuario.