每个系统都需要识别操作者的身份,并根据其不同的身份,分配一定的权限,做一些操作上的限制。随着系统的增多,若是单独给每个系统都设计了一套用户资料和权限管理的机制,并提供了用户登录证认,虽可以解决问题,但是将会带来和用户账号管理不方便,用户资料不统一等等问题。所以,将用户资料整合起来,进行统一管理很多必要。
本文的目的,将有一定联系,拥有统一用户群的系统进行关联,统一用户的登录资料,并提供统一的登录认证入口,这里称为 统一认证系统。
根据我们的需求,用户的体验一般有两种:
一、需要访问某个子系统,则需要在 认证系统上,登陆用户,在跳转到需要访问的页面;
二、如果在某个子系统登录超时了,在直接进入特定子系统之前,需要重新 登录验证
1、用户先与统一登录系统进行交互,使用唯一的帐号密码进行登录,此时不涉及任何子系统;
2、用户登录成功后,统一登录系统将信任的应用子系统列表呈现给用户;
3、用户根据需要,选择子系统连接访问子系统,用户与子系统的交互开始;
4、由于用户与子系统此时还没有建立认证关系,所以子系统将用户重定向到统一登录系统;
5、统一登录系统验证用户的登录信息,发现用户已经登录,便将登录信息插入到数据库,再将验证信息发给用户,即返回一个等待页面;
6、用户将等待页面中的验证信息提交(自动)到子系统,子系统获取认证信息;
7、子系统通过一定的办法和等待页面中的验证信息进行验证,并与用户建立了信任关系;
分两种方式进行实现,详细情况如下:
第一种方式:通过MD5加密随机字符串,使用了Web服务实现了子系统和统一认证系统之间的交互验证。验证信息包含两部分用户在统一登录系统的Session ID和数据库中的随机ID。当子系统将用户重定向到统一登录系统的时候,验证的交互过程开始,详细步骤如下:
1、统一登录系统获取用户的Session ID和登录名
2、统一登录系统将Session ID和登录名插入到数据库,产生一个随机的数据库ID
3、将Session ID和数据库ID结合起来,进行MD5加密
4、使用MD5密文和数据库ID构建一个登录等待页面,返回给用户
5、用户将登录等待页面中的信息自动提交给子系统
6、子系统通过Web服务将MD5密文和数据库ID提交回统一登录系统
7、统一登录系统查询数据库,并进行验证
8、统一登录系统返回用户登录名,并删除数据库中的登录记录。
9、子系统与用户建立认证关系
图2. MD5随机加密,Web服务实现验证
第二种方式:通过对认证信息(登录令牌)进行非对称加密,一次交互实现验证。验证信息为一个包含了产生时间的Token类。验证的交互过程同样是在重定向到统一登录系统的时候开始,详细步骤如下:
1、构建一个包含生成时间的Token类,将Token类序列化
2、使用SHA-1,对序列化Token编码进行散列,产生验证码H
3、将序列化Token编码和验证码H结合,使用公钥加密
4、使用密文构建一个登录等待页面,返回给用户
5、用户将登录等待页面中的信息自动提交给子系统
6、子系统使用私钥进行解密
7、子系统分离出散列验证码H和序列化Token编码,并进行SHA-1验证
8、检查Token中的生成时间,判断是否超时
9、子系统与用户建立认证关系
参考链接:http://blog.csdn.net/llftc/article/details/6995496