Foros de consultas y discusión

Saml

Gonzalo Rodriguez, modificado hace 6 años.

Saml

Youngling Mensajes: 8 Fecha de incorporación: 29/03/17 Mensajes recientes
Hola Estamos tratando de implementar el login utilizando el sso que ustedes proveen, pero no estamos pudiendo y el error que reporta no dice mucho.

Tenemos un principio de implementacion que nos redirige al portal pero luego de poner el pin da el error.

Podran orientarnos sobre que estamos haciendo mal?

La url de nuestra implementacion es https://tecnoticket.mybluemix.net/login

Somos estudiantes del tecnologo en informatica y estamos haciendo la materia proyecto.

Saludos
thumbnail
Guillermo Dotta, modificado hace 6 años.

RE: Saml

Youngling Mensajes: 12 Fecha de incorporación: 29/09/16 Mensajes recientes
Buenas. Habiendo probado la aplicación, vemos que el error que da se debe a alguna falla de seguridad en el Assertion.

Por favor hagan una prueba de login, capturen el SAML request que están enviando al IDP y péguenlo acá así lo analizamos.
Por el momento en que da el error parecería que podría ser un fallo en el chequeo de la ACS URL, que es la URL de retorno. Verifiquen que en el SAML Request que envían estén poniendo para el Assertion Consumer Service URL el mismo valor con el que se registraron como partners, porque esto es algo que chequea el IDP.

Saludos,
​​​​​​​Guillermo
thumbnail
Nicolas Piquerez, modificado hace 6 años.

RE: Saml

Padawan Mensajes: 62 Fecha de incorporación: 3/10/16 Mensajes recientes
Hola, la URL de retorno que se les configuro para el taller es https://tecnologo.edu.uy/acs por lo que van a tener que realizar alguna configuración en el archivo /etc/hosts para mapear ese dominio a el servidor web.

Saludos
Gonzalo Rodriguez, modificado hace 6 años.

RE: Saml

Youngling Mensajes: 8 Fecha de incorporación: 29/03/17 Mensajes recientes
Hola Nicolas, probe agregar tecnologo.edu.uy a /etc/hosts y me sigue dando el mismo problema.

Me baje un plugin para el navegador para ver los mensajes saml y solo aparece uno al inicio que es el que me redirige a la pagina del login, antes del error no aparece ningun otro, esto me parece raro ya que si el chequeo fuera del lado del cliente deberia ver el otro redirect.

El unico mensaje que veo es este:
<AuthnRequest xmlns="urn:oasis:names:tc:SAML:2.0:protocol"
              xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
              Version="2.0"
              ID="_291ae2926d1bda819da676d4936c84dd7a9b101d36"
              IssueInstant="2017-04-26T21:23:32.285Z"
              Destination="https://test-eid.portal.gub.uy/idp/profile/SAML2/Redirect/SSO"
              AssertionConsumerServiceURL="https://test-eid.portal.gub.uy/idp/profile/SAML2/POST/SSO"
              ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
              >
    <saml:Issuer>https://test-eid.portal.gub.uy/idp</saml:Issuer>
    <NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
                  AllowCreate="true"
                  />
</AuthnRequest>
thumbnail
Nicolas Piquerez, modificado hace 6 años.

RE: Saml

Padawan Mensajes: 62 Fecha de incorporación: 3/10/16 Mensajes recientes
Hola Gonzalo, en el mensaje AuthRequest que estas generando tenes información incorrecta.
El Assertion Consumer URL debe ser la URL donde recibes la repuesta (la que te comente en el primer mensaje). En Issuer debe ir su Enity Id que esta configurado para ser "https://tecnologo.edu.uy/".
Ademas el mensaje debera ser firmado, aunque con el binding que estas elijiendo usar (Redirect), la firma queda fuera del mensaje xml.

​​​​​​​Saludos 
Gonzalo Rodriguez, modificado hace 6 años.

RE: Saml

Youngling Mensajes: 8 Fecha de incorporación: 29/03/17 Mensajes recientes
Hola Nicolas, no queria pegar codigo pero va a ser lo mas facil para entendernos.

Por lo que me decis deberia definir mi sp de esta manera segun entiendo:

// Create service provider
var sp_options = {
  entity_id: "https://tecnologo.edu.uy/",
  private_key: fs.readFileSync("key-file.pem").toString(),
  certificate: fs.readFileSync("AANCAPrueba.crt").toString(),
  assert_endpoint: "https://tecnologo.edu.uy/acs"
};

y el idp de esta otra:

// Create identity provider
var idp_options = {
  sso_login_url: "https://test-eid.portal.gub.uy/idp/profile/SAML2/Redirect/SSO",
  sso_logout_url: "https://test-eid.portal.gub.uy/idp/profile/SAML2/Redirect/SLO",
  certificates: [fs.readFileSync("Agesic-Coesys-Testing.cer").toString(), fs.readFileSync("Agesic-Coesys-Testing.cer").toString($
};

El tema que al poner esto asi me da error de primera y no me llega a mostrar el login, el error que da es este:
Operation failedThe request does not meet security requirements.N/A

Si entran a http://tecnologo.edu.uy lo van a ver, terminamos comprando el dominio para descartar problemas.
thumbnail
Nicolas Piquerez, modificado hace 6 años.

RE: Saml

Padawan Mensajes: 62 Fecha de incorporación: 3/10/16 Mensajes recientes
Tiene sentido si el código. Cuando da ese error hay que investigar el log y ver por donde puede venir la mano, peor para eso necesitamos el SAMLRequest como te comento Guille y fecha de la prueba.
Proba con el nuevo codigo, captura el SAMLRequest y si no hay nada raro, chequeamos el log para ver porque falla.


​​​​​​​Saludos
Gonzalo Rodriguez, modificado hace 6 años.

RE: Saml

Youngling Mensajes: 8 Fecha de incorporación: 29/03/17 Mensajes recientes
Ok, gracias Nicolas.

El recuest que capture con saml tracer es este:
<AuthnRequest xmlns="urn:oasis:names:tc:SAML:2.0:protocol"
              xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
              Version="2.0"
              ID="_48edd530df8cb939379dfb8d3da836595a986ac25b"
              IssueInstant="2017-04-27T19:10:30.729Z"
              Destination="https://test-eid.portal.gub.uy/idp/profile/SAML2/Redirect/SSO"
              AssertionConsumerServiceURL="https://tecnologo.edu.uy/acs"
              ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
              >
    <saml:Issuer>https://tecnologo.edu.uy/</saml:Issuer>
    <NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified"
                  AllowCreate="true"
                  />
</AuthnRequest>
La prueba la hice a las 16:10 del 27/04
thumbnail
Nicolas Piquerez, modificado hace 6 años.

RE: Saml

Padawan Mensajes: 62 Fecha de incorporación: 3/10/16 Mensajes recientes
Gonzalo, aparentemente el mensaje no esta siendo firmado:

​​​​​​​16:10:30.077 [http-apr-8080-exec-10] [EGOV-SESSION-ID:6017166BB58834AA78D7F8156A208688] INFO  Shibboleth-Access - 20170427T191030Z|10.255.15.54|test-eid.portal.gub.uy:443|/profile/SAML2/Redirect/SSO|
16:10:30.092 [http-apr-8080-exec-10] [EGOV-SESSION-ID:6017166BB58834AA78D7F8156A208688] ERROR org.opensaml.saml2.binding.security.SAML2AuthnRequestsSignedRule - SPSSODescriptor for entity ID 'https://tecnologo.edu.uy/' indicates AuthnRequests must be signed, but inbound message was not signed
16:10:30.092 [http-apr-8080-exec-10] [EGOV-SESSION-ID:6017166BB58834AA78D7F8156A208688] WARN  edu.internet2.middleware.shibboleth.idp.profile.saml2.SSOProfileHandler - Message did not meet security requirements
org.opensaml.ws.security.SecurityPolicyException: Inbound AuthnRequest was required to be signed but was not
    at org.opensaml.saml2.binding.security.SAML2AuthnRequestsSignedRule.evaluate(SAML2AuthnRequestsSignedRule.java:89) ~[opensaml-2.5.3.jar:na]
    at org.opensaml.ws.security.provider.BasicSecurityPolicy.evaluate(BasicSecurityPolicy.java:51) ~[openws-1.4.4.jar:na]
    at org.opensaml.ws.message.decoder.BaseMessageDecoder.processSecurityPolicy(BaseMessageDecoder.java:132) ~[openws-1.4.4.jar:na]
    at org.opensaml.ws.message.decoder.BaseMessageDecoder.decode(BaseMessageDecoder.java:83) ~[openws-1.4.4.jar:na]
    at org.opensaml.saml2.binding.decoding.BaseSAML2MessageDecoder.decode(BaseSAML2MessageDecoder.java:70) ~[opensaml-2.5.3.jar:na]
    at edu.internet2.middleware.shibboleth.idp.profile.saml2.SSOProfileHandler.decodeRequest(SSOProfileHandler.java:373) [shibboleth-identityprovider-2.3.8-slo10.jar:na]
    at edu.internet2.middleware.shibboleth.idp.profile.saml2.SSOProfileHandler.performAuthentication(SSOProfileHandler.java:211) [shibboleth-identityprovider-2.3.8-slo10.jar:na]
    at edu.internet2.middleware.shibboleth.idp.profile.saml2.SSOProfileHandler.processRequest(SSOProfileHandler.java:189) [shibboleth-identityprovider-2.3.8-slo10.jar:na]
    at edu.internet2.middleware.shibboleth.idp.profile.saml2.SSOProfileHandler.processRequest(SSOProfileHandler.java:90) [shibboleth-identityprovider-2.3.8-slo10.jar:na]
    at edu.internet2.middleware.shibboleth.common.profile.ProfileRequestDispatcherServlet.service(ProfileRequestDispatcherServlet.java:84) [shibboleth-common-1.3.7-slo2.jar:na]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:731) [servlet-api.jar:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303) [catalina.jar:7.0.61]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.61]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) [spring-web-3.2.9.RELEASE.jar:3.2.9.RELEASE]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:106) [spring-web-3.2.9.RELEASE.jar:3.2.9.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.61]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.61]
    at com.gemalto.ics.rnd.egov.common.util.CookieVersionFixingFilter.doFilter(CookieVersionFixingFilter.java:32) [webapp-util-1.0.0.RC37.jar:1.0.0.RC37]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.61]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.61]
    at com.gemalto.ics.rnd.egov.idp.frontcontroller.saml.filter.PrivateKeyEntryCachingFilter.doFilter(PrivateKeyEntryCachingFilter.java:37) [front-controller-saml-1.0.0.RC46.jar:1.0.0.RC46]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.61]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.61]
    at com.gemalto.ics.rnd.egov.common.util.NoCacheFilter.doFilter(NoCacheFilter.java:72) [webapp-util-1.0.0.RC37.jar:1.0.0.RC37]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.61]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.61]
    at com.gemalto.ics.rnd.egov.idp.frontcontroller.saml.filter.HashingIdPSessionFilter.doFilter(HashingIdPSessionFilter.java:74) [front-controller-saml-1.0.0.RC46.jar:1.0.0.RC46]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.61]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.61]
    at com.gemalto.ics.rnd.egov.idp.filter.PerformanceMonitorFilter.doFilter(PerformanceMonitorFilter.java:36) [idp-server-common-1.0.0.RC46.jar:1.0.0.RC46]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.61]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.61]
    at com.gemalto.ics.rnd.egov.idp.filter.AuthenticationStatisticsFilter.doFilter(AuthenticationStatisticsFilter.java:42) [idp-server-common-1.0.0.RC46.jar:1.0.0.RC46]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.61]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.61]
    at com.gemalto.ics.rnd.egov.idp.filter.AuthenticationAuditFilter.doFilter(AuthenticationAuditFilter.java:44) [idp-server-common-1.0.0.RC46.jar:1.0.0.RC46]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.61]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.61]
    at edu.internet2.middleware.shibboleth.common.log.SLF4JMDCCleanupFilter.doFilter(SLF4JMDCCleanupFilter.java:52) [shibboleth-common-1.3.7-slo2.jar:na]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.61]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.61]
    at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) [shiro-web-1.2.2.jar:1.2.2]
    at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) [shiro-web-1.2.2.jar:1.2.2]
    at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) [shiro-core-1.2.2.jar:1.2.2]
    at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) [shiro-core-1.2.2.jar:1.2.2]
    at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) [shiro-core-1.2.2.jar:1.2.2]
    at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) [shiro-web-1.2.2.jar:1.2.2]
    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) [shiro-web-1.2.2.jar:1.2.2]
    at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:343) [spring-web-3.2.9.RELEASE.jar:3.2.9.RELEASE]
    at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260) [spring-web-3.2.9.RELEASE.jar:3.2.9.RELEASE]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) [catalina.jar:7.0.61]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) [catalina.jar:7.0.61]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) [catalina.jar:7.0.61]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) [catalina.jar:7.0.61]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) [catalina.jar:7.0.61]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) [catalina.jar:7.0.61]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) [catalina.jar:7.0.61]
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950) [catalina.jar:7.0.61]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) [catalina.jar:7.0.61]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) [catalina.jar:7.0.61]
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) [tomcat-coyote.jar:7.0.61]
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620) [tomcat-coyote.jar:7.0.61]
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2476) [tomcat-coyote.jar:7.0.61]
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2465) [tomcat-coyote.jar:7.0.61]
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) [na:1.6.0_45]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) [na:1.6.0_45]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-coyote.jar:7.0.61]
    at java.lang.Thread.run(Thread.java:662) [na:1.6.0_45]
Gonzalo Rodriguez, modificado hace 6 años.

RE: Saml

Youngling Mensajes: 8 Fecha de incorporación: 29/03/17 Mensajes recientes
Ok gracias, veo como firmarlo
Gonzalo Rodriguez, modificado hace 6 años.

RE: Saml

Youngling Mensajes: 8 Fecha de incorporación: 29/03/17 Mensajes recientes
Hola, el problema con la firma del request era que la libreria que estabamos usando estaba rota, ahora cambiamos la libreria y llegamos a la pantalla de login.
Luego de poner el pin igual nos da error.

Les dejo un request del 1/05/2017 sobre las 18:53
<samlp:AuthnRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol"
                    xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion"
                    ID="162c5097-ae31-4edd-9023-d5ced35d6ca3"
                    Version="2.0"
                    IssueInstant="2017-05-01T21:52:58.450Z"
                    Destination="https://test-eid.portal.gub.uy/v1.1/idp/profile/SAML2/Redirect/SSO"
                    ProtocolBinding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                    AssertionConsumerServiceURL="undefined"
                    >
    <saml:Issuer>https://tecnologo.edu.uy/</saml:Issuer>
    <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
                        AllowCreate="false"
                        />
</samlp:AuthnRequest>

Por si quieren probar la url del login es https://tecnologo.edu.uy/loginci

Gracias,
Saludos
Mathías De León, modificado hace 6 años.

RE: Saml

Youngling Mensajes: 4 Fecha de incorporación: 26/05/17 Mensajes recientes
Hola Gonzalo, al parecer estamos teniendo el mismo problema de que no se está firmando el certificado. Estamos usando esta librería:

(Acá está mi hilo de consulta en este foro: https://centroderecursos.agesic.gub.uy/web/seguridad/foro-de-consultas/-/message_boards/message/92967)

Es bastante parecido el código que utilizaron ustedes, al final por cuál la cambiaron?
Alguna guía?

Muchas gracias.
​​​​​​​saludos!
thumbnail
Nicolas Piquerez, modificado hace 6 años.

RE: Saml

Padawan Mensajes: 62 Fecha de incorporación: 3/10/16 Mensajes recientes
Genial Gonzalo! Ya es un avance. Todavía no vi el log pero ya te voy adelantando.  AssertionConsumerServiceURL="undefined", esta mal, aqui debe de ir la URL donde van a recibir la respuesta y debe coincidir con la dada de alta (creo que te dije cual era en un post anterior), sino falla luego del login al no coincidir la URL de respuesta.

En <samlp:NameIDPolicy Format="urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"/>

Eso antes era así, pero ahora debe utilizarse "transient" o "unspecified", actualemente esta definido como "unspecified", de esta manera en el assertion de respuesta llegará como ID el UID del usuario, del estilo uy-dni-12341231 correspondientes al pais, tipo de documento y numero de documento (numero de cedula).

Saludos
Gonzalo Rodriguez, modificado hace 6 años.

RE: Saml

Youngling Mensajes: 8 Fecha de incorporación: 29/03/17 Mensajes recientes
Ok, gracias.

No habia notado esto AssertionConsumerServiceURL="undefined"

Tratato de arreglar eso y les cuento