HTTP (REST API) を使用してセル内の別のサーバーを呼び出す EJB があります。
EJB コンテキストで、ユーザーはすでに認証および承認されています。リクエストで資格情報を提供する必要を回避して、セキュリティ トークンを他のサーバーに伝播するにはどうすればよいですか?
セキュリティからWebSphere のLtpa
トークンを取得し、それをHTTP 呼び出しのsubject
として渡すことができます。cookie
public static SingleSignonToken getSSOTokenFromSubject(final Subject subject) {
if (subject == null) {
return null;
}
return AccessController.doPrivileged(new PrivilegedAction<SingleSignonToken>() {
public SingleSignonToken run() {
Set<SingleSignonToken> ssoTokens = subject.getPrivateCredentials(SingleSignonToken.class);
for (SingleSignonToken ssoToken : ssoTokens) {
if (ssoToken.getName().equals("LtpaToken")) {
return ssoToken;
}
}
return null;
}
});
}
// Get cookie to add to outgoing HTTP requests
SingleSignonToken ssoToken = getSSOTokenFromSubject(subject);
String ssoTokenStr = null;
if (ssoToken != null) {
byte[] ssoTokenBytes = ssoToken.getBytes();
ssoTokenStr = com.ibm.ws.util.Base64.encode(ssoTokenBytes);
}
String ssoTokenCookie = "LtpaToken2=" + ssoTokenStr;
をリクエスト Cookie に追加するssoTokenCookie
と、ユーザー資格情報を提供する必要がなくなります。