从EJB调用HTTP时如何支持WebSphere安全性令牌

时间:2012-12-19 09:20:56

标签: security http ejb websphere ltpa

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

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

2 个答案:

答案 0 :(得分:2)

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

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,无需提供用户凭据。

答案 1 :(得分: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)