如何解密LTPA令牌版本2

时间:2013-08-25 10:27:25

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

我正在研究WebShpere和PHP Web应用程序之间需要SSO实现的项目。

然而,在我看一下实现SSO的可能方法之后,我找到了用于在不同IBM技术之间实现SSO的LTPA令牌。

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

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

  

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

但我仍然试图在没有运气的情况下解密这个令牌。

有任何帮助吗?

2 个答案:

答案 0 :(得分:4)

Alfresco项目就是这样做的。看一下这个blog post指针,包括工作代码。

为了澄清事情,LTPA令牌的内容是或多或少像“uid = user,cn = users,ou = myorg,dc = com @ ldaprealm%timeout%[RSA signature]”的字符串,用共享AES密钥并使用Base64编码。 LTPA v2不会使用3DES,而只使用AES。所以你真正要做的是AES解密cookie,你已经可以读取用户名了。您不必验证RSA签名。

答案 1 :(得分:-3)

为什么需要从文件中解密?令牌是否与您所做的调用一起传递?传递时,LTPA令牌通过Base64编码,您可以轻松解码它。以下是如何从令牌获取信息的示例:

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());
    }
}