A API da biblioteca SAML pode ser usada para criar um token SAML emitido automaticamente que tenha atributos customizados.
Sobre Esta Tarefa
Ao criar tokens SAML emitidos automaticamente usando o gerador de tokens SAML, não há como incluir atributos customizados usando as propriedades do manipulador de retorno de chamada. No entanto, usando a API da biblioteca SAML, é possível criar um manipulador de retorno de chamada do atributo SAML customizado, definido no arquivo SAMLIssuerConfig.properties, que pode incluir atributos em um token SAML emitido automaticamente. Os aplicativos que usam o método newSAMLToken também podem usar um manipulador de retorno de chamada do atributo SAML.
O manipulador de retorno de chamada do atributo SAML será executado para todos os tokens SAML que são criados a partir do servidor de aplicativos com o arquivo SAMLIssuerConfig.properties modificado.
Procedimento
- Desenvolva um manipulador de retorno de chamada de atributo SAML customizado. Por Exemplo:
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, "There is no callback.");
}
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);
}
}
}
}
}
- Inclua a propriedade customizada AttributeProvider no arquivo (cellRoot)/sts/SAMLIssuerConfig.properties. Por exemplo: AttributeProvider=test.saml.AttributeProvider
Resultados
Quando essa tarefa é concluída usando o código de amostra fornecido, o seguinte elemento é incluído em todos os tokens SAML:
<saml:AttributeStatement>
<saml:Attribute Name="newAttribute">
<saml:AttributeValue>newValue</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>