OAuth2.0理解和用法

现在网络的资料到处都是,很容易搜索到自己想要的答案。但答案通常只能解决自己一部分的问题。如果自己想要有一套自己的解决方案,还得重新撸一遍靠谱。

我需要学下OAuth2.0吗?

没看之前以为OAuth2.0是登录认证授权的东西,自己的项目里应该是需要的。实际上OAuth是为了第三方应用访问我们资源用的,大多数开发者基本不会用到这个东西。对于自己应用的认证授权,还是基于拦截器的token,SpringSecurity即可。只有做平台级别,像微信,微博,github这种级别才会用到。而真到那个时候,再看也行,也通常不会是你来做。简而言之,非必须。

接下来,我将从几个方面了解和学习使用OAuth2.0。对不对就不管了,反正我也几乎不会用到。ps.有个项目用到了,所以才会有本文。

OAuth2.0介绍和功能

微信开放平台和github的OAuth2.0接入应用

自己写一个OAuth2.0服务

Springboot OAuth2.0集成

快速了解OAuth2.0

资源很多,看起来比较麻烦,可以直接看Authorization Code授权码流程,以微信登录为例子的介绍。

OAuth2.0是什么

官方介绍是: OAuth 2.0授权框架允许第三方应用程序通过协调资源所有者和HTTP服务之间的审批交互,或允许第三方应用程序自己获得访问权限,从而获得对HTTP服务的有限访问。也就是授权别人(client)访问我们的资源

The OAuth 2.0 authorization framework enables a third-party
application to obtain limited access to an HTTP service, either on
behalf of a resource owner by orchestrating an approval interaction
between the resource owner and the HTTP service, or by allowing the
third-party application to obtain access on its own behalf.  This
specification replaces and obsoletes the OAuth 1.0 protocol described
in RFC 5849.

别人(client)是什么?

登录石墨文档可以输入账号密码登录,也可以选择微信登录,微信扫码确认后,就登录了石墨文档。石墨文档通过微信认证的方式实现了自身的认证登录。这个石墨文档就是client的角色(Role)。

什么时候需要让别人(client)访问我们的资源?

最常见的是微信授权登录,对client来说,是用户授权client拿到用户在微信上的信息,比如性别,唯一id。

我们怎么才能做到授权给别人访问我们的资源

我们自己怎么获取自己的资源?我们登录后就可以获取到自己的账号信息等资源了。那么怎么给到别人?直接把我们的账号密码给第三者太不安全了。一个是自己的账号密码存在泄露的风险,一个是自己的账号权限太大,万一被别人删除了或者看到了不该看到的东西怎么办。在使用阿里云的时候,我们可以给自己的账号开子账号,给子账号一些权限访问哪些服务(授权太复杂了),这样我们就可以达到最初的目的了: 让别人安全的访问我们的资源。

OAuth通过引入授权层并将client的角色与资源所有者的角色分离, 并且给client单独的凭证(access_token),client通过access_token获取有限的资源。

OAuth2.0定义的角色

resource owner
资源的拥有者,通常就是用户,比如登录的用户。

resource server
资源服务,提供资源的服务。需要access_token才允许被调用。比如微信api,通过access_token调用它可以获取到用户的性别等信息。

client
客户端,第三方客户端,被授权访问的应用。比如石墨文档通过微信登录的时候,石墨文档就是client角色,它要用户授权获取用户微信的信息。

authorization server
资源认证授权服务。用户登录到本服务后,可以选择授权给第三方。比如微信登录,微信认证服务就是authorization server的角色。可以颁发给client code,可以通过code换取access token. 可以通过access_token认证用户。

乍一看可能有点迷乱。站在登录用户的角度,简单的分为3个阵营: 用户本身(resource owner), 用户要登录的应用(client), 用户的资源(resource server and authrization server). authorization server和resource server是一体的,一家的,比如都是微信的。这样清晰一些。只是对于微信内部,个人信息,朋友圈,公众号,小程序啥的,资源挺多,相当于多个resource server, 内部就分成了authorization server和多个resource server.

搞清楚这里面的角色后,再来看协议的流程。

OAuth2.0的协议流程

整体抽象协议流程如下。

A: client找用户(resource owner)请求授权,说你得让我获取你的微信昵称. 然后用户就看到微信授权页面(authorization server)显示是否允许client获取昵称。

B: 用户点确认,微信就会给client一个临时授权code。

C: client拿着上一步得到的授权code去找authorization server换一个access_token.

D: authorization server认证了client的参数,确认后,给client返回access_token.

E: client拿access_token去获取信息,比如获取用户昵称,头像。

F: client如愿以偿。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpwxjs.html