单点登陆SSO实现方式浅谈

本文探讨了单点登录(SSO)的三种主要实现方式:Session共享、基于Cookie的SSO及URL凭证传递法。每种方法都有其适用场景与局限性,如Session共享适用于子系统间,而URL凭证传递法则能较好地解决跨域问题。

    单点登陆(SSO)通常用于将多个系统串联起来,统一身份验证,简化用户登陆步骤,实现登陆一次即可自动登陆所有相互信任的应用系统。架构单点登陆系统有多种方式,先将我所查阅的资料和感悟与大家分享,有不足之处还望不吝赐教。

1. Session共享 

    这算是实现单点登陆最简单的一种方式了。一般用redis集群即可做到,将用户的session id放置在cookie顶级域中即可在子系统中直接应用,代码成本低,有比较好的开源实现,比如 https://github.com/jcoleman/tomcat-redis-session-manager 。 但是这种方式的缺点也是明显的,只能应用在子系统中,跨顶级域名的情况就束手无策了。

2. SSO(cookie实现)

    用户先向sso系统请求登陆A系统的凭证,获取凭证之后将凭证存放在cookie中,然后带着cookie请求登陆系统A,系统A检测到凭证的存在向SSO系统验证凭证是否正确,凭证正确则登陆成功,流程草图如下

    此种方式未解决跨域的问题,cookie的存储载体是顶级域,只能在子系统中应用sso,每个子系统单独验证,并且具有白名单功能,在某些不需要跨域的系统中也是一个可行的解决方案。

3. SSO

    与cookie的实现方式不同,这种方式将凭证仅存于url中,流程草图如下

    

3的方式完美解决跨域的问题,也是现在架构中常用的sso解决方案。当中还有许多技术细节没有体现出来,比如白名单的实现,凭证时效性的实现,sso单点系统压力等,这些需要在实际使用中进行修改和调整。

最后奉上sso的一个开源实现 经典的CAS  https://github.com/apereo/cas

 

 

转载于:https://my.oschina.net/lanshu/blog/888967

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值