oauth2单点登录(一个被大家误解了的单点登录)
1. 什么是单点登录?
在《百度百科》中是这样解释的:
单点登录(SingleSignOn,SSO),就是通过用户的一次性鉴别登录。当用户在身份认证服务器上登录一次以后,即可获得访问单点登录系统中其他关联系统和应用软件的权限,同时这种实现是不需要管理员对用户的登录状态或其他信息进行修改的,这意味着在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。这种方式减少了由登录产生的时间消耗,辅助了用户管理,是比较流行的。
企业业务逐渐壮大的过程中,开发了很多的业务系统,每个业务系统都有自己的用户登录、注册模块,从而导致一个员工要开展工作就需要在每一个用的业务系统中注册账号,每访问一个系统,就需要使用与之对应的账号密码进行登陆。无形中增加了员工的工作成本。
单点登录就是为了解决这一痛点。通过统一的用户登录授权,实现所有不同业务系统之间用户登录身份状态的打通,减少员工使用系统的工作成本,提高工作效率。
2. 单点登录的实现方式有哪些?单点登录实现中,系统之间的协议对接是非常重要的一个环节,常见的标准协议类型有:
3. OAuth 2.0 协议
- CAS:Central Authentication Service简称CAS,是一种常见的B/S架构的SSO协议。
- OAuth 2.0:关于授权的开放网络标准。
- OpenID:OpenID 是一个以用户为中心的数字身份识别框架,它具有开放、分散性。
- SAML:安全断言标记语言(英语:Security Assertion Markup Language,简称SAML,发音sam-el)是一个基于XML的开源标准数据格式,它在当事方之间交换身份验证和授权数据,尤其是在身份提供者和服务提供者之间交换。
OAuth 是一个关于授权的开放网络标准,在全世界得到广泛应用,目前的版本是 2.0。OAuth 1.0 协议当时设计得过于复杂,不便于使用,就没有推广起来。而 OAuth 2.0 属于新设计的协议,和1.0没有任何的关系,这点需要注意。
OAuth 2.0 解决的主要场景是:第三方应用如何被授权访问资源服务器。整个流程参与者包括几个组成部分:
- Resource Owner: 资源拥有者,通常为终端用户
- Resource Server: 资源提供者
- Authorization Server: 授权服务器
- Client: 请求访问服务访问的应用
授权的流程可以简化为如下:
OAuth 2.0针对不同的业务场景提供了不同的授权模式:
4. 单点登录的一些常见疑问
- Authorization Code Grant: 授权码模式,最为常用,最安全,强烈推荐;
- Implicit Grant: 适用于SPA应用,已经不再推荐使用,被PKCE模式所替代;
- Resource Owner Password Credentials Grant: 需要把用户的用户名和密码暴露给Client;
- Client Credential Grant: 整个流程没有用户的概念,适用于服务端->服务端调用的场景。
如果业务系统登退了认证中心会退出吗?
单点登录就像字面上的意思一样,只要一个认证中心登录了,其他系统就不需要再次输入用户名密码进行登录。 但是单点登录不管登出。
单点登录认证中心颁发的token时间太短怎么办?
出于安全考虑,所有系统颁发的token都是有时效性的。
对于 OAuth 2.0 协议的单点登录,目的是为了解决第三方系统获取认证中心的用户资源,即使再短,也够第三方系统使用token获取用户信息了。
业务系统之所以觉得token时间短的原因是把用户的每一个操作都用 OAuth 2.0 颁发的token去获取用户信息,这是技术使用上的错误。
举个例子:如果所有和 QQ对接了OAuth 2.0的系统每次操作都请求QQ服务,第一QQ会将其拉入黑名单,视为攻击,第二把自己命运的喉咙交给了别人。
5. 总结每一种技术的出现都是为了解决某一场景的特定问题,很难找到一种可以应对所有场景的技术存在。这也是技术不断迭代发展的动力。同样,对于业务来来讲,业务的创新也来自于此。
,
免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com