【12期】谈谈项目中单点登录的实现原理?
一、共享Session
Session中所涉及的类型必须是子系统中共同拥有的(即程序集、类型都需要一致),这导致Session的使用受到诸多限制;
跨域名的情况完全无法处理;
二、基于OpenId的单点登录
当用户次登录时,将用户名密码发送给验证服务;
验证服务将用户标识OpenId返回到客户端;
客户端进行存储;
访问子系统时,将OpenId发送到子系统;
子系统将OpenId转发到验证服务;
验证服务将用户认证信息返回给子系统;
子系统构建用户验证信息后将授权后的内容返回给客户端。
三、基于Cookie的OpenId存储方案
在提供验证服务的站点里登录;
将OpenId写入域名Cookie里;
访问子系统(Cookie里带有OpenId)
子系统取出OpenId通过并向验证服务发送OpenId
返回用户认证信息
返回授权后的内容
四、B/S多域名环境下的单点登录处理
用户通过登录子系统进行用户登录;
用户登录子系统记录了用户的登录状态、OpenId等信息;
用户使用业务子系统;
若用户未登录业务子系统则将用户跳转至用户登录子系统;
用户子系统通过JSONP接口将用户OpenId传给业务子系统;
业务子系统通过OpenId调用验证服务;
验证服务返回认证信息、业务子系统构造用户登录凭证;(此时用户客户端已经与子业务系统的验证信息已经一一对应)
将用户登录结果返回用户登录子系统,若成功登录则将用户跳转回业务子系统;
将授权后的内容返回客户端;
五、安全问题
相关文章