1

我有一个 EJB,它使用 HTTP(REST api)调用单元中的另一台服务器。

在 EJB 上下文中,用户已经过身份验证和授权,如何将安全令牌传播到其他服务器,避免在请求中提供凭据?

4

2 回答 2

2

可以从安全性获取 WebSphere 的Ltpa令牌subject并将其作为cookieHTTP 调用的 a 传递:

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;

通过向ssoTokenCookie请求 cookie 添加 ,无需提供用户凭据。

于 2012-12-19T09:20:56.053 回答
0
Cookie ltpaCookie = WebSecurityHelper.getSSOCookieFromSSOToken();

从当前线程的主题中提取 SSO 令牌并从中构建 SSO cookie 以用于下游 Web 调用。基本上下面帖子中的整个代码是做什么的。我相信可以从 WAS 8.x 访问此方法。

需要以下 Jar 作为编译参考:com.ibm.ws.admin.client-8.5.0.jar
(我在此示例中使用 WAS 8.5.5.11)

于 2018-03-23T16:47:04.237 回答