剖析LtpaToken(实现B/S应用间的安全SSO)

一、 LtpaToken组成原理

通过了解LtpaToken的组成原理,我们就可以自己编码生成和解析LtpaToken了。首先一个LtpaToken的合成公式如下:

Header: LtpaToken 版本(长度4),Domino的固定为[0x00][0x01][0x02][0x03]

n        [SHA-1 hash] = SHA-1([header][creation time][expiration time][username][shared secret])

二、 Domino如何处理LtpaToken

查看一下dominoWeb SSO配置文档:

1、 Domino生成LtpaToken的密钥存放在LTPA_DominoSecret字段

2、 LTPA_TokenExpiration字段存放失效分钟数。

3、 LTPA_TokenName字段存放Token表示在cookiename

….如下图:

 

再加上上面分析过的LtpaToken组成原理,我们大概可以知道domino是怎么生成LtpaToken的了。详细的debug信息可以通过在notes.ini里面配置条目DEBUG_SSO_TRACE_LEVEL=2之后去查看日志。

      

      Domino解析LtpaToken步骤:

1、 Base64解码LtpaToken

2、 截取最前面20字节,最后面20字节,中间部分就是用户名。如果用户名在本系统中不正确,返回无效的LtpaToken

3、 截取最后面20字节,是SHA-1校验和。用Token中的其余部分和本系统中的密钥生成新的SHA-1校验和,如果2个校验和不匹配。返回无效的LtpaToken

4、 当前服务器时间必须大于创建时间,小于失效时间。否则返回无效的LtpaToken

5、 最后解析通过了,完成用户的登录

 

6、   Java应用上实现生成和解析LtpaToken的测试

2.1   生成LtpaToken的测试

 

文件列表:

Base64.java           base64编码和解码的类

Bundle.java           properties资源文件的处理类

LtpaConfig.java     Token资料配置类。

LtpaToken.java      产生和解析LtpaToken的类

LtpaConfig_zh_CN.properties      配置文件

 

第一步,配置LtpaConfig_zh_CN.properties,填好ltpaSecret。这个值本身是base64编码。

如果是和dominosso。需要从dominoweb sso文档中获取,见上一张图。

tokenDomain信息是生成http cookie的时候用的,本测试中暂不用到。

tokenExpiration是生成LtpaToken时用的,本测试中暂也不用。

 

第二步,添加一个测试的类:

main函数中输入以下测试代码:

 

newString user=;

generate(user," date="" font="" strong="" font="" style="FONT-SIZE: 10pt" color="#7f0055" face="">newSystem.out.println(generate);

CN=Admin/O=S3D生成一个LtpaToken

输出:

 

<FONT style="FONT-SIZE: 10pt" color="black" face="""> 

domino去验证Token的有效性:

1、 复制上面产生的Token.

2、 打开IE,输入Domino服务器的首页地址:http://devp.s3d.com/

3、 出现登录页面,这里不输入用户名和密码。直接在IE地址栏里面输入:  

javascript:alert(document.cookie="LtpaToken=AAECAzRCOTlEOTQxNEI5OURERjFDTj1BZG1pbi9PPVMzRKb6cFIxqIX+lGjQhDDWaeN4IvXe");

以上红色部分是复制的Token

4、 弹出对话框,cookie设置成功,按F5刷新页面,成功以Admin身份登录Domino主页,LtpaToken测试成功。

 

2.2   解析LtpaToken的测试

下面测试解析一个由Domino产生的LtpaToken

1、 打开一个新的IE窗口,输入Domino服务器的首页地址:http://devp.s3d.com/

2、 输入一个普通用户的帐号/密码,正常进入首页。

3、 IE地址栏输入:javascript:document.write(document.cookie)

4、 复制出Cookie中的LtpaToken的值,如:

AAECAzRCOTlEQTZGNEI5QTgzMkZDTj1saXVnYW5nMi9PPWVzc2VuY2VzZNmGPcgH0NQxnrhgnn1/JrPkHgg=

 

在测试类中添加以下测试代码:

new"AAECAzRCOTlEQTZGNEI5QTgzMkZDTj1saXVnYW5nMi9PPWVzc2VuY2VzZNmGPcgH0NQxnrhgnn1/JrPkHgg="   token中取出用户名

out   token是否有效

if       System..println(<FONT style="FONT-SIZE: 10pt" color="#2a00ff" face=""">"token是有效的<FONT style="FONT-SIZE: 10pt" color="#2a00ff" face=""">"       }

输出以下内容:

 

到这里,解析LtpaToken测试成功。

 

7、   总结

LtpaToken非常安全方便,不失为一种较好的SSO解决方案。

1、 通过以上对LtpaToken的了解:可以给大多数B/S应用配置使用基于LtpaTokenSSO

 

本文地址:http://blog.youkuaiyun.com/titanzhi/article/details/5754543 转发请注明出处及原作者

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值