今天上午开始学习OAuth2.0授权。

一.什么是OAuth2.0

1.OAuth是一个关于授权(authorization)的开放网络标准,目前的版本是2.0版,比如:微信授权,支付宝授权,QQ授权,微博授权等等,下图是微信和支付宝平台授权图,

也可看下 http://www.ruanyifeng.com/blog/2019/04/oauth_design.html(阮一峰)介绍OAuth。

android 支付宝授权 支付宝授权应用2.0是什么_C#

android 支付宝授权 支付宝授权应用2.0是什么_服务器_02

2.OAuth2.0授权流程可以参考下面的流程图,其中Client指第三方应用,Resource Owner指用户,Authorization Server是我们的授权服务器,Resource Server是API服务器。

android 支付宝授权 支付宝授权应用2.0是什么_C#_03

解释一下上述流程:

(A)用户打开客户端以后,客户端要求用户给予授权。
(B)用户同意给予客户端授权。
(C)客户端使用上一步获得的授权,向认证服务器申请令牌。
(D)认证服务器对客户端进行认证以后,确认无误,同意发放令牌。
(E)客户端使用令牌,向资源服务器申请获取资源。
(F)资源服务器确认令牌无误,同意向客户端开放资源。

3.OAuth的四种授权方式:授权码(authorization-code),隐藏式(implicit),密码式(password),客户端凭证(client credentials)

也可以看 http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html (阮一峰)介绍四种授权方式。

第一种授权方式:授权码

授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。

这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。

android 支付宝授权 支付宝授权应用2.0是什么_客户端_04

第二种方式:隐藏式

有些 Web 应用是纯前端应用,没有后端。这时就不能用上面的方式了,必须将令牌储存在前端。RFC 6749 就规定了第二种方式,允许直接向前端颁发令牌。这种方式没有授权码这个中间步骤,所以称为(授权码)"隐藏式"(implicit)。

android 支付宝授权 支付宝授权应用2.0是什么_客户端_05

第三种方式:密码式

如果你高度信任某个应用,RFC 6749 也允许用户把用户名和密码,直接告诉该应用。该应用就使用你的密码,申请令牌,这种方式称为"密码式"(password)。

android 支付宝授权 支付宝授权应用2.0是什么_源服务器_06

第四种方式:凭证式

最后一种方式是凭证式(client credentials),适用于没有前端的命令行应用,即在命令行下请求令牌。

android 支付宝授权 支付宝授权应用2.0是什么_android 支付宝授权_07

最后就先介绍这些,后续进行补充学习。