Foros de consultas y discusión

Consultas Logout

Michell Mamrut, modificado hace 7 años.

Consultas Logout

Youngling Mensaje: 1 Fecha de incorporación: 15/03/17 Mensajes recientes
Hola, buen día

Dejo algunas consultas que me están sugiendo a la hora de implementar el Logout:

1 - Con respecto al documento colgado en la web: "..y finalmente en el parámetro Signature ira la firma de los últimos dos parámetros concatenados..", esto se refiere que tomando los parámetros SAMLRequest y concatenandolo con el parámetro SigAlg debería poder verificarlo? o debería antes hacerle un decode al parámetro SAMLRequest antes de concatenarlo? de ser posible me gustaría ver un ejemplo de como quedaría concatenado ya que estuve probando de varias formas y no logro verificarlo

2 -  Yo estoy mandando un Logout Global Request:
<?xml version="1.0" encoding="UTF-8"?>
<saml2p:LogoutRequest Destination="https://test-eid.portal.gub.uy/idp/profile/SAML2/Redirect/SLO" ID="_7625dd4ed7887188b33bd2878414cf4d" IssueInstant="2017-03-09T14:06:01.182Z" Version="2.0" xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol"><saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion">https://sso.genexusconsulting.com</saml2:Issuer><saml2:NameID NameQualifier="https://sso.genexusconsulting.com" xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion"/><saml2p:SessionIndex>c4a4877f6f392f765df63ed694ddc608075251c1c5bc7cc5a063cca0296e07ec</saml2p:SessionIndex></saml2p:LogoutRequest>

No debería recibir un Logout Global Response al servlet logoutresponse? ya que previamente en el formulario de alta indicamos que el Single Logout response Location sería: https://sso.genexusconsulting.com/sso/servlet/logoutresponse.

En cambio estoy recibiendo esa respuesta al servlet logout que sería el Single Logout Location:

<?xml version="1.0" encoding="UTF-8"?><saml2p:LogoutResponse xmlns:saml2p="urn:oasis:names:tc:SAML:2.0:protocol" Destination="https://sso.genexusconsulting.com/sso/servlet/logout" ID="_32db10c5d2ab5a96a501f48876a7c27e" InResponseTo="_7625dd4ed7887188b33bd2878414cf4d" IssueInstant="2017-03-09T14:06:01.701Z" Version="2.0"><saml2:Issuer xmlns:saml2="urn:oasis:names:tc:SAML:2.0:assertion" Format="urn:oasis:names:tc:SAML:2.0:nameid-format:entity">https://test-eid.portal.gub.uy/idp</saml2:Issuer><saml2p:Status><saml2p:StatusCode Value="urn:oasis:names:tc:SAML:2.0:status:Success"/></saml2p:Status></saml2p:LogoutResponse>

3 - Como se podría probar el Logout pero cuando no soy yo el que lo inicia? tienen alguna forma?


Muchas gracias desde ya,
Saludos,
​​​​​​​Michell Mamrut GXC
thumbnail
Nicolas Piquerez, modificado hace 7 años.

RE: Consultas Logout

Padawan Mensajes: 62 Fecha de incorporación: 3/10/16 Mensajes recientes
Michell, te pido disculpas en la demora en contestar, pense que habia quedado publicada la contestación pero veo que no.

Con respecto al punto uno, leyendo el estandar, se usa el binding HTTP-Redirect por lo que uno debe de armar primero el SAMLRequest (o SAMLResponse) sin firma. Luego se le hace un DEFLATE, o sea se comprime y de ahi se codifica a base64 y URL encoding si es necesario. El resultado se pone en la variable SAMLRequest o SAMLResponse. Luego se agrega otro parametro SigAlg cuyo valor dira el algoritmo de firma a usar (se le realiza URL encoding). A la concatenación de todos los anteriores parametros (incluyendo por ejemplo RelayState si se usa) se le realiza la firma. Se le realiza por ejemplo la firma a SAMLRequest=valor&RelayState=valor&SigAlg=valor o SAMLResponse=valor&RelayState=valor&SigAlg=valor según sea el caso y esa firma se pone en un nuevo parametro al final Signature de modo que luego de realizar base64 y URL encoding a este último parametro la URL del redirect nos quedara del estilo SAMLResponse=valor&RelayState=valor&SigAlg=valor&Signature=valor.

Si no se entiende avisame.

Ahora te sigo contestando las otras dudas por separado.

Saludos
thumbnail
Nicolas Piquerez, modificado hace 7 años.

RE: Consultas Logout

Padawan Mensajes: 62 Fecha de incorporación: 3/10/16 Mensajes recientes
Con respecto al punto 2, nosotros tenemos la posibilidad de dar de alta dos URLs para el Logout. Una se llama Location y otra Logout Location. En general tendemos a poner la misma. La diferencia radica en que una se usa cuando uno solicita el logout y la otra cuando uno recibe una petición. De todas formas el comportamiento en tu caso es el correcto, tu solicitas un logout global y recibis un LogoutResponse indicando que fue exitoso. En cambio si otro hubiera iniciado el logout global tu recibirias un LogoutRequest y deberias de devolver un LogoutResponse con exito (e invalidar tu sesión claramente). Es una buena practica para el ecosistema que si incluso no se tiene una sesión local en el sistema cuando se recibe un LogoutRequest, responder con success, para que la autenticación global no falle. 
thumbnail
Nicolas Piquerez, modificado hace 7 años.

RE: Consultas Logout

Padawan Mensajes: 62 Fecha de incorporación: 3/10/16 Mensajes recientes
Con lo que comentabas capaz quedaron mal configuradas, lo chequeamos
thumbnail
Nicolas Piquerez, modificado hace 7 años.

RE: Consultas Logout

Padawan Mensajes: 62 Fecha de incorporación: 3/10/16 Mensajes recientes
Con respecto al punto 3 podes probar logueandote y deslogueandote en los siguientes SP de ejemplo:

https://test-eid.portal.gub.uy/sp-idp para test
https://eid.portal.gub.uy/sp-idp para producción.


Espero haberte sido de ayuda y cualquier otra consulta a las ordenes.

Saludos