Adición de atributos a señales SAML autoemitidas mediante la API

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

  1. 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);
                    }
                }
            }
        }
    }
  2. 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>

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_addingattributestoselfissuedSAMLtokens
File name: twbs_addingattributestoselfissuedSAMLtokens.html