De forma predeterminada, el interceptor de asociación de confianza (TAI) de SAML de WebSphere Application Server
da soporte al SSO iniciado por IdP. Cuando se aplica el código personalizado, el TAI de SAML puede configurarse para dar soporte al SSO iniciado por SP.
Acerca de esta tarea
Esta tarea proporciona una clase de ejemplo y los pasos necesarios para configurar SSO iniciado por SP.
Procedimiento
- Desarrolle un proveedor de solicitudes de autenticación SAML que implemente la interfaz com.ibm.wsspi.security.web.saml.AuthnRequestProvider.
El método
getAuthnRequest(HttpServletRequest req, String errorMsg, String acsUrl, ArrayList<String> ssoUrls) debe devolver una correlación que incluya cuatro entradas con las claves siguientes:
- AuthnRequestProvider.SSO_URL
- El URL de inicio de sesión único del proveedor de identidad SAML.
- AuthnRequestProvider.RELAY_STATE
- relayState, tal como se define en el perfil de inicio de sesión único de navegador web SAML.
- AuthnRequestProvider.REQUEST_ID
- El valor de esta clave debe coincidir con el valor del atributo ID en el mensaje AuthnRequest.
- AuthnRequestProvider.AUTHN_REQUEST
- Un mensaje AuthnRequest codificado en Base64, tal como se define en la especificación. El código es responsable de generar el mensaje AuthnRequest.
public HashMap <String, String> getAuthnRequest(HttpServletRequest req, String errorMsg,
String acsUrl, ArrayList<String> ssoUrls)
throws NotImplementedException {
//crear la correlación con las claves siguientes
HashMap <String, String> map = new HashMap <String, String>();
String ssoUrl = "https://example.com/saml20/Login";
map.put(AuthnRequestProvider.SSO_URL, ssoUrl);
String relayState = generateRandom();
map.put(AuthnRequestProvider.RELAY_STATE, relayState);
String requestId = generateRandom();
map.put(AuthnRequestProvider.REQUEST_ID, requestId);
//crear AuthnRequest
String authnMessage = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
+"<samlp:AuthnRequest xmlns:samlp=\"urn:oasis:names:tc:SAML:2.0:protocol\" "
+"ID=\""+requestID+"\" Version=\"2.0\" "
+ "IssueInstant=\"" +getUTC()+ "\" ForceAuthn=\"false\" IsPassive=\"false\""
+ "ProtocolBinding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST\" "
+ "AssertionConsumerServiceURL=\"" +acs+"\" "
+ "Destination=\"" +destination +"\"> "
+ "<saml:Issuer xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">"
+ issuer
+"</saml:Issuer> <samlp:NameIDPolicy"
+"Format=\"urn:oasis:names:tc:SAML:2.0:nameid-format:transient\""
+"SPNameQualifier=\"mysp\""
+"AllowCreate=\"true\" /> <samlp:RequestedAuthnContext Comparison=\"exact\"> "
+"<saml:AuthnContextClassRef xmlns:saml=\"urn:oasis:names:tc:SAML:2.0:assertion\">"
+"urn:oasis:names:tc:SAML:2.0:ac:classes:</samlp:RequestedAuthnContext> </samlp:AuthnRequest>";
map.put(AuthnRequestProvider.AUTHN_REQUEST, authnMessage);
return map;
}
- Añada un archivo jar que contenga su clase personalizada en el directorio (WAS_HOME)/lib/ext.
- Configure el TAI de SSO web SAML para que utilice el mensaje AuthnRequest.
- Inicie sesión en la consola administrativa de WebSphere Application Server.
- Pulse .
- Expanda Seguridad Web y SIP y pulse Asociación de confianza .
- Pulse Interceptores.
- Pulse com.ibm.ws.security.web.saml.ACSTrustAssociationInterceptor
- En Propiedades personalizadas, pulse Nueva y complete la siguiente información de propiedad personalizada, donde el id es el que ha asignado al proveedor de servicios (SP) SSO para el que desea aplicar esta propiedad:
- Nombre: sso_<id>.sp.login.error.page
- Valor: el nombre de clase de la implementación de AuthnRequestProvider personalizada.