对OAuth协议的认识
一. OAuth是什么
OAuth 是Open Authorization的简写。OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。
通俗地说,就是当我们想把自己系统的某些功能暴露给第三方系统进行调用,并且需要对第三方系统的调用设置一定的访问权限(使得第三方应用可以使用令牌在限定时间、限定范围访问指定资源。)
这样一来这两个系统的开发人员之间就得做系统的对接,
但如果本方系统按照OAUTH协议的标准进行了相应的实现,那么这个对接的过程就不需要双方进行额外沟通。调用方只要按照标准的实现进行对接就可以了。
OAuth协义有两个版本1.0 和 2.0 ,2.0 相对比较简洁是目前比较流行的做法。OAuth具体的实现细节大致如下:
1. 由本方系统向第三方系统提供公钥和clientId
2. 第三方系统的某次访问以http形式携带公钥和clientId访问本方系统的OAuth授权中心
3.授权中心将对合法的请求返回一个授权code
4.第三方再携带code再次访问授权中心用code去换取令牌,这个过程应走https的加密通道
5. 获得令牌后,就可以携带令牌访问本方系统开放给第三方系统的API服务了
二. OAuth和SSO单点登录的区别
OAuth2解决的是服务提供方(微信等)给第三方应用授权的问题,而sso解决的是大型系统中各个子系统如何共享登陆状态的问题。
两者都是基于分布式系统,涉及到多个角色,但是不同的是,OAuth2是一种具体的协议,sso可以说是一种技术,可以用cookie实现,
甚至也可以用OAuth2实现(虽然不是很好),比如OAuth中的服务提供方可以充当sso认证中心,OAuth中的第三方应用也可以是sso中的子系统。
三.在微服务中何时可以考虑使用OAuth认证
除非要把自己系统的功能暴露给第三方访问(即暴露自己的注册中心),且不需要双方进行额外沟通,本方才需要实现OAuth2授权
四.实现微信帐号登录自己系统的原理
此时微信一方应实现OAuth2授权,我们的系统通过调用微信的授权获得令牌,然后用令牌去访问微信的相关接口(例如获取用户名等等)来实现微信用户在本方系统的登录和访问。
五. OAuth应用的场景
1. 有的系统希望第三方系统的用户也可以访问他的系统,以提升访问流量。
例如:我们开发的一套系统,希望微信或者QQ的用户能够无需注册就能登录访问我们的系统,这需要借助微信或者QQ提供的OAuth的API完成授权验证,然后访问微信或者QQ的公开的API获到用户信息,然后就可以让微信或者QQ的用户访问我们的系统。因为通过微信或者QQ的OAuth接口的验证,我们是可以信任这些用户的,并且也获取到了这些用户的信息。
2. 不同的系统之间的功能协作
例如:一个用户同时是两个系统(系统A和系统B)的用户,现在A系统有一个功能,希望是调用B系统某个功能来协助完成的。比如有一个"云冲印"的网站,可以将用户储存在Google的照片,冲印出来。用户为了使用该服务,必须让"云冲印"读取自己储存在Google上的照片。
参考资料:
http://www.ruanyifeng.com/blog/2019/04/oauth_design.html
http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html