令牌的设计与实现

令牌内容的构成

令牌内容的第1、2、3、五部份内容长度是固定的,第四部份内容可根据应用的实际须要进行扩充,除了存储用户信息以外,还能够存储其余与应用相关的信息,具备较强的可扩充性,避免了因固定长度带来令牌可扩充性的限制。算法

令牌内容的加密和解密

  为了保证令牌在传递过程当中的安全,必须对原始令牌的内容进行加密,本文对令牌中的校验信息使用不可逆加密算法,防止校验令牌在传输过程当中被截 取并篡改;用户信息使用对称加密算法,以便其余系统的解密。目前采用了AES、SHA-一、Base64等三种加/解密算法,经过这三种加/解密算法保证 数据的安全。数组

  AES加密算法用于加密用户信息及生成的令牌;SHA-1算法用于计算用户密码和令牌的校验和;Base64将AES加密后的令牌编/解码。安全

加密流程

  令牌加密流程首先按令牌内容结构填充内容,计算内容的校验和后填充到校验和内容区。加密流程图如图2。编码

1. 将版本号、当前用户登陆时间、会话失效时间和用户登陆信息按照令牌各部分所属位置进行填充。

2. 系统A中的用户密码在注册时已经将用 户登陆密码使用MD5加密,就再也不使用AES加密算法对用户登陆密码加密,直接使用SHA-1计算出用户登陆密码的校验和(记为D1),填充到令牌数组的 最后20位里。

3. 因为直接将密码的校验和发送给客户端将带来安全性的问题,本应用中将使用SHA-1再次计算整个令牌数组的校验和(记为D2),获得 一个新的20位数组,并填充到原令牌数组里的最后20位里,用校验和D2验证令牌在传递过程当中是否被篡改,如同电子指纹的做用。

4. 使用AES加密算法 对令牌数组进行加密,再使用Base64算法进行编码获得令牌,在系统之间传输的便是此令牌。

解密流程

  令牌解密流程较加密流程复杂一些,过程与令牌加密流程相反,增长了令牌内容校验和与接收的校验和比较,以比较结果做为令牌是否被篡改的依据。解密流程图如图3。加密

1. 使用Base64算法解码,再使用AES解密算法对解码后的数组进行解密。
2. 取出解密令牌数组的最后20位(记为D1)。同时获取 系统B中存储的经MD5加密的用户密码,使用SHA-1计算校验和,填充到解密令牌数组的最后20位里,再次使用SHA-1计算整个令牌数组的校验和(记 为D2)。
3. 比较D1和D2是否一致,若是不一致则说明令牌在传递过程当中被篡改,跳转到系统B的登陆页面从新登陆;若是一致则完成后续的登陆校验,跳 转到系统B的应用界面。

令牌的集成应用

用户首先从系统A登陆,后台验证无误后按照加密流程生成当前用户的SSO令牌。用户从系统A切换到系统B时,提交到系统B的登陆模块中的信息中包含由系统A生成的SSO令牌,系统B按照解密流程对SSO令牌解密,验证无误后由系统B完成登陆并跳转到系统B的应用界面。code

相关文章
相关标签/搜索