2

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

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

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

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

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

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

有什么帮助吗?

4

2 回答 2

5

Alfresco 项目做到了这一点。查看这篇博客文章以获取指针,包括工作代码。

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

于 2013-08-25T16:49:44.870 回答
-3

为什么需要从文件中解密?令牌不是与您进行的调用一起传递的吗?传递时,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());
    }
}
于 2013-08-25T13:59:33.967 回答