La API de biblioteca de SAML puede utilizarse para crear una señal SAML autoemitida con atributos personalizados.
Acerca de esta tarea
Cuando se crean señales SAML autoemitidas utilizando el generador de señales SAML, no hay forma de añadir
atributos
personalizados utilizando propiedades de manejador de devolución de llamada. Sin embargo, utilizando la API de biblioteca SAML, puede crearse un manejador
de devolución
de llamada de atributos SAML personalizados que se define en el archivo SAMLIssuerConfig.properties y que puede añadir atributos a una señal
SAML autoemitida. Un manejador de devolución de llamada de atributos SAML también puede ser utilizado por aplicaciones que utilizan el método newSAMLToken.
El manejador de devolución de llamada de atributos SAML se ejecutará para todas las señales SAML creadas desde el servidor de aplicaciones con el
archivo SAMLIssuerConfig.properties modificado.
Procedimiento
- Desarrolle un manejador de devolución de llamada de atributos SAML personalizados. Por ejemplo:
package test.saml;
import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.UnsupportedCallbackException;
import com.ibm.websphere.wssecurity.callbackhandler.Saml11AttributeCallback;
import com.ibm.wsspi.wssecurity.saml.data.SAMLAttribute;
import java.util.ArrayList;
public class AttributeProvider implements javax.security.auth.callback.CallbackHandler {
@Override
public void handle(Callback[] callbacks) throws IOException,
UnsupportedCallbackException {
if (callbacks == null || callbacks.length == 0) {
throw new UnsupportedCallbackException(null, "No hay ninguna devolución de llamada.");
}
for (int i = 0; i < callbacks.length; i++) {
if (callbacks[i] instanceof Saml11AttributeCallback) {
Saml11AttributeCallback callback = (Saml11AttributeCallback)callbacks[i];
SAMLAttribute attr = new SAMLAttribute("newAttribute", new String[]{"newValue"}, null, null, null, null);
ArrayList<SAMLAttribute> attrList = callback.getSAMLAttributes();
if (attrList == null) {
attrList = new ArrayList<SAMLAttribute>();
attrList.add(attr);
callback.setSAMLAttributes(attrList);
} else {
attrList.add(attr);
}
}
}
}
}
- Añada la propiedad personalizada AttributeProvider al archivo (cellRoot)/sts/SAMLIssuerConfig.properties. Por ejemplo: AttributeProvider=test.saml.AttributeProvider
Resultados
Cuando esta tarea se haya completado utilizando el código de ejemplo proporcionado, el elemento siguiente se añadirá a todas las señales SAML:
<saml:AttributeStatement>
<saml:Attribute Name="newAttribute">
<saml:AttributeValue>newValue</saml:AttributeValue>
</saml:Attribute></saml:AttributeStatement>