SAML 库 API 可用于创建具有定制属性的自签发 SAML 令牌。
关于此任务
自签发 SAML 令牌是使用 SAML 令牌生成器创建的,无法使用回调处理程序属性添加定制属性。但是,使用 SAML 库 API 时,可以创建 SAMLIssuerConfig.properties 文件中定义的定制 SAML 属性回调处理程序,可用于向自签发 SAML 令牌添加属性。SAML 属性回调处理程序还可由使用 newSAMLToken 方法的应用程序使用。
SAML
属性回调处理程序将针对使用修改的 SAMLIssuerConfig.properties 文件从应用程序服务器创建的所有 SAML 令牌运行。
过程
- 开发定制 SAML 属性回调处理程序。 例如:
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);
}
}
}
}
}
- 将 AttributeProvider 定制属性添加到 (cellRoot)/sts/SAMLIssuerConfig.properties
文件。 例如:AttributeProvider=test.saml.AttributeProvider
结果
使用提供的样本代码完成此任务时,会向所有 SAML 令牌添加以下元素:
<saml:AttributeStatement>
<saml:Attribute Name="newAttribute">
<saml:AttributeValue>newValue</saml:AttributeValue>
</saml:Attribute>
</saml:AttributeStatement>