【问题标题】:How to propage WebSphere security tokens when calling HTTP from EJB从 EJB 调用 HTTP 时如何传播 WebSphere 安全令牌
【发布时间】:2012-12-19 09:20:56
【问题描述】:

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

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

【问题讨论】:

    标签: security http ejb websphere ltpa


    【解决方案1】:

    可以从安全subject 获取WebSphere 的Ltpa 令牌并将其作为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 中,无需提供用户凭据。

    【讨论】:

      【解决方案2】:
      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)

      【讨论】:

      • 请解释这段代码的作用以及它如何/为什么解决了 OP 的问题
      猜你喜欢
      • 2011-02-14
      • 2014-02-08
      • 1970-01-01
      • 2016-08-24
      • 2012-08-01
      • 2019-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多