我正在做一个项目,这是WebShpere和PHP应用程序之间需要的SSO实现。
但是,在查看了实现SSO的可能方法之后,我发现了LTPA令牌,它用于实现不同IBM技术之间的SSO。
但是LTPA令牌2是加密的cookie文件。如果我想使用这个文件中的信息,比如(用户i,用户名,电子邮件),我应该解密.等)。
我已经对LTPA 2和更低版本进行了深入的搜索,这是我从IBM找到的最好的定义。
LTPA2签名采用SHA-1作为哈希算法,RSA (1024位密钥)作为加密算法.在附加数字签名之后,用户数据和签名将使用从LTPA密钥文件中获取的3 3DES或AES密钥加密(请参阅“消费LTPA令牌”和“生成LTPA令牌”)。
但我仍然试图破译这个标记而没有运气。
有什么帮助吗?
发布于 2013-08-25 16:49:44
阿尔弗雷科项目做到了这一点。看看这个指针的博客帖子,包括工作代码。
为了澄清问题,LTPA令牌的内容或多或少类似于"uid=user、cn=users、ou=myorg、dc=com@ldaprealm%timeout%RSA签名“,使用共享的AES密钥加密,并用Base64编码。LTPA v2将不使用3 AES,而只使用AES。所以,您真正需要做的是对cookie进行AES解密,并且您已经可以读取用户名了。你不需要验证RSA签名。
发布于 2013-08-25 13:59:33
为什么你需要从文件中解密?令牌不是和你打的电话一起传递的吗?传递时,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());
}
}https://stackoverflow.com/questions/18428016
复制相似问题