SAML ライブラリー API を使用して、カスタム属性のある自己発行 SAML トークンを作成することができます。
このタスクについて
SAML トークン生成プログラムを使用して自己発行 SAML トークンが作成されるときには、
コールバック・ハンドラー・プロパティーを使用してカスタム属性を追加する方法はありません。しかし、SAML ライブラリー API を使用することによって、
自己発行 SAML トークンに属性を追加できる、SAMLIssuerConfig.properties ファイル内に定義されたカスタム SAML 属性コールバック・ハンドラーを作成できます。newSAMLToken メソッドを使用するアプリケーションも SAML 属性コールバック・ハンドラーを使用できます。
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>