es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo obtener el ID de entidad del proveedor de confianza en AuthenticationSuccessHandler en spring-boot saml2login?

Tengo una aplicación de multipropiedad que utiliza el inicio de sesión saml2 de Spring-Boot (finalmente migrado desde la extensión spring-saml). Dos propietarios pueden autenticar a un solo usuario (identificado por una dirección de correo electrónico). Piense en dos distritos escolares, una escuela primaria y una escuela secundaria, ambos con una cuenta de padre (parent@gmail.com) asociada a dos niños que tienen cada uno en cada edificio. Necesito saber qué IDP me está enviando la respuesta saml. En la vieja escuela, la extensión spring-saml, podía hacer lo siguiente:

 final SAMLCredential samlCred = (SAMLCredential) (authentication.getCredentials());
 if (samlCred != null) {
     return getCustomerService().getActiveCustomerBySamlEntityId(samlCred.getRemoteEntityID())
             .filter(c -> c != null && c.isFullyActive());
 }

Para obtener el ID de entidad y el cliente asociado, pero con el nuevo inicio de sesión saml2 en Spring Boot 2.5+, llamando:

authentication.getCredentials()

solo devuelve una cadena de la respuesta SAML (XML) que necesitaría analizar (y tal vez descifrar). Entonces, ¿hay algún método fácil para obtener la información del IPD, preferiblemente el ID de entidad de la autenticación (o Saml2AuthenticatedPrincipal) en Spring Security?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay un método fácil para obtener la información del IDP, incluyendo el ID de entidad, desde la Autenticación o el SAML2AuthenticatedPrincipal en Spring Security. De hecho, el SAML2AuthenticatedPrincipal contiene toda la información que necesitas.

    Para acceder al SAML2AuthenticatedPrincipal, simplemente puedes convertir el objeto de Autenticación a Saml2Authentication, de esta manera:

     Saml2Authentication saml2Authentication = (Saml2Authentication) authentication;
    

    Luego, puedes obtener el ID de entidad del IDP de esta manera:

     String idpEntityId = saml2Authentication.getIdentityProviderEntityId();
    

    Y si necesitas información adicional del IDP, puedes obtener el Saml2AuthenticatedPrincipal de esta manera:

     Saml2AuthenticatedPrincipal principal = (Saml2AuthenticatedPrincipal) saml2Authentication.getPrincipal();
    

    Desde el Saml2AuthenticatedPrincipal, puedes acceder a cualquier atributo SAML que se incluyó en la respuesta SAML, incluyendo los metadatos del IDP. Por ejemplo, para obtener los metadatos del IDP, puedes hacer lo siguiente:

     String idpMetadata = principal.getFirstAttribute("saml2:IdPMetadata");
    

    ¡Espero que esto te ayude!

Comments are closed.