【问题标题】:How to decrypt LTPA token version 2如何解密 LTPA 令牌版本 2
【发布时间】:2013-08-27 23:48:09
【问题描述】:

我正在开发一个需要在 WebShpere 和 PHP Web 应用程序之间实现 SSO 的项目。

但是,在我查看了实现 SSO 的可能方法之后,我发现了用于在不同 IBM 技术之间实现 SSO 的 LTPA 令牌。

但是 LTPA 令牌 2 是加密的 cookie 文件。如果我想使用此文件中的信息,例如(用户名、用户名、电子邮件...等),我应该解密它。

我对 LTPA 令牌 2 进行了深入搜索,以下是我从 IBM 找到的最佳定义。

LTPA2 签名是使用 SHA-1 作为散列算法生成的,并且 RSA(1024 位密钥)作为加密算法。数字后 已附加签名,用户数据和签名已加密 使用从 LTPA 密钥文件中获得的 3DES 或 AES 密钥(请参阅 “使用 LTPA 令牌”和“生成 LTPA 令牌”)。

但我仍在尝试解密此令牌,但没有运气。

有什么帮助吗?

【问题讨论】:

    标签: java php encryption websphere single-sign-on


    【解决方案1】:

    Alfresco 项目做到了这一点。看看这个blog post 的指针,包括工作代码。

    为了澄清,LTPA 令牌的内容是或多或少类似于“uid=user,cn=users,ou=myorg,dc=com@ldaprealm%timeout%[RSA signature]”的字符串,使用共享 AES 密钥并使用 Base64 编码。 LTPA v2 将不使用 3DES,而仅使用 AES。因此,您真正需要做的是对 cookie 进行 AES 解密,并且您已经可以读取用户名。您不必必须验证 RSA 签名。

    【讨论】:

      【解决方案2】:

      为什么需要从文件中解密?令牌不是与您进行的调用一起传递的吗?传递时,LTPA 令牌通过 Base64 进行编码,您可以轻松地对其进行解码。下面是一个如何从token中获取信息的例子:

      import javax.security.auth.Subject;      
      import javax.xml.bind.DatatypeConverter;
      import com.ibm.websphere.security.cred.WSCredential;
      import com.ibm.wsspi.security.token.Token;
      
      Subject subject = ...; // obtain current JAAS subject
      
      Set<?> publicCredentials = subject.getPublicCredentials();
      for (Object credential : publicCredentials) {
          if (credential instanceof Token) {
              System.out.println(DatatypeConverter.printBase64Binary(((Token) credential).getBytes()));
              System.out.println(((Token) credential).getName());
              System.out.println(((Token) credential).getUniqueID());
              System.out.println(((Token) credential).getAttributeNames());
          }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-02-22
        • 2015-01-02
        • 1970-01-01
        • 2016-02-07
        • 1970-01-01
        • 1970-01-01
        • 2021-01-26
        • 2011-12-12
        • 1970-01-01
        相关资源
        最近更新 更多