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