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.NameIDCallback;
import com.ibm.wsspi.wssecurity.saml.data.SAMLNameID;
public class NameIDProvider 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 NameIDCallback) {
NameIDCallback callback = (NameIDCallback)callbacks[i];
SAMLNameID nameid = new SAMLNameID("newNameID", null, null, null, null);
callback.setSAMLNameID(nameid);
}
}
}
}
- 将 NameIDProvider 定制属性添加到 (cellRoot)/sts/SAMLIssuerConfig.properties
文件。 例如:NameIDProvider =test.saml.NameIDProvider
结果
使用提供的样本代码完成此任务时,会向所有 SAML 令牌添加以下元素:
<saml:Subject>
<saml:NameID>newNameID</saml:NameID>
</saml:Subject>