OAuth 2.0 是目前最流行的授权机制,用来授权第三方应用,获取用户数据。
阮一峰的文章写的已经非常清楚了,我简单总结一下我对SSO的观点。
为什么需要单点登录?
简单阐述一下动机,比如你要开发一个邮件App,用户通过"登录"可以获取自己gmail邮件,最简单的就是你给用户一个登录界面输入用户在google的用户名和密码,但这个时候用户就会担心现在你(App的供应商)有了用户名和密码,就可以用这个密码去gmail登录进而看到所有用户邮件,这个肯定不行, 但其实google也希望第三方App在不接触最终用户的用户名和密码的情况下来扩展自身生态。
基于资源方、第三方(ISV)和终端用户的几方面诉求,就产生了OAuth (RFC6749),现在的OAuth2.0在2012年定稿,所以已经非常成熟了。
但很多人接触OAuth是来自于另外一个场景,公司需要开发两个网站共享一套登录,所以很多人会认为OAuth是用来做身份验证的。
其实不管哪种场景,殊途同归,就好比刀可以切菜,也可以砍人。你把底层的原理想明白就ok。
服务接口的登录设计
我是在做前后端分离的时候才真正开始接触单点登录,当时后端采用node,前端采用react,如果在不借助cookie和session的方式下如何设计登录和授权方式。最终兜兜转转才发现OAuth2就是最好的解决方案:
- backend service: 对应资源方
- react webapp: 对应第三方App