1

HTTP (REST API) を使用してセル内の別のサーバーを呼び出す EJB があります。

EJB コンテキストで、ユーザーはすでに認証および承認されています。リクエストで資格情報を提供する必要を回避して、セキュリティ トークンを他のサーバーに伝播するにはどうすればよいですか?

4

2 に答える 2

2

セキュリティから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と、ユーザー資格情報を提供する必要がなくなります。

于 2012-12-19T09:20:56.053 に答える