再好的技术方案仅仅是为了解决问题。那SSO是为了解决用户登陆输入用户名和密码的问题、更准确的说,在大型网站发展的过程中会衍生出很多个子系统、而这些子系统都需要输入用户名和密码进行登陆、当然现在一个综合性的应用系统也是如此、可能部分子系统模块是H5形式、部分子系统是原生态语言形式。
问题来了?为什么那些子系统需要登陆、回答这个问题需要知道系统发展演变的过程、不同的子系统可能代表着不同的业务线的发展、原有系统都存在用户状态验证过程,那在子系统跳转过程中势必要让用户去重新登陆。另外、频繁输入用户的账户体系,无疑增大了被攻破的危险。
那么SSO意义就在于让用户经过统一的认证,然后畅游于各个系统之间。
微软的Passport方案和自由联盟方案的对比
1 微软的Passport单点登录采用的是在重定向信息中包含加密后的验证信息来进行交。
1.1 主体定义:N/A
1.2 流程:N/A
1.3 涉及算法:三重DES加密算法加密 加密密钥:Passport认证服务器 和服务提供服务器约定
1.4 涉及到协议:SSL、Kerberos认证机制
备注:
(Kerberos机制、http://blog.csdn.net/wulantian/article/details/42418231)、我觉的了解即可
(DES算法机制、https://my.oschina.net/ydsakyclguozi/blog/540648)
2 联盟的单点登录规范是采用安全声明标记语言(SAML)来进行交互的。
备注:SAML具备的一个最突出的好处,是使用户能够通过因特网进行安全证书移动,SMAL的工作原理参见相关文档(http://baike.baidu.com/link?url=KJ2-5Eos5xViO23aTROPo97YFceysUzI22Dnhty22bIFffidaHur6LFZIcpmqXmhbv5iKqf7IBYEB506ZKtVua)
2.1 主体定义:N/A
2.2 流程:N/A
上述的Kerberos认证机制、和SAML都是统一身份认证的机制原理、包含与SSO的统一定义中。
常见的一些问题:
1 利用Cookie作为SSO方案、如何解决跨域登陆的问题?
A:首先这是一个淘汰性的早期方案、这是因为本身Cookie就会带来这样的局限性、目前无法解决。
2 如何高效存储大量临时性的信任数据?
A:利用Memched或者Redis之类的内存式数据库进行管理
3 如何防止信息传递过程被篡改?(会话安全)
A:获取ticket的时候进行验证、从服务系统到SSO系统时候还需要进行一次验证
4 如何让SSO系统信任登录系统和免登系统?
A:白名单机制
目前第三方开源框架实现SSO的方案有
1 CAS
2 OAuth
3 JOSSO