OAuth2.0

OAuth 的四种方式:授权码、隐藏式、密码式、凭证式

授权码方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。这种方式是最常用的流程,安全性极高,它适用于那些有后端的Web应用。授权码通过前端传送,令牌则是存储在后端,而且所有与服务器通信都在后端。这样前后端分离,可以避免令牌泄露。

隐藏式,有些web应用是纯前端的,没有后端。这时就不能用授权码方式,令牌必须存储在前端。RFC6749规定了第二方式,就是允许直接向前端颁发令牌。

密码式,如果你高度信任某个应用, REC6749也允许用户将用户名和密码直接告诉应用,该应用使用你的密码获取令牌。这种方式需要用户给出自己的用户名和密码,风险极大,因此只适用于其它授权方式都无法采用的情况下,而且必须是用户高度信任的应用。

凭证式,适用于没有前端的命令行应用,即在命令行下请求应用。这种方式给出的令牌适用于第三方应用,而不是针对用户的,即有可能多个用户其享同一令牌。

下面以网易云音乐为列,写一个简单的示例,演示第三方登录。

所谓第三方登录,实质就是 OAuth 授权。用户想要登录 A 网站,A 网站让用户提供第三方网站的数据,证明自己的身份。获取第三方网站的身份数据,就需要 OAuth 授权。

举例来说,网易云音乐允许QQ登录,背后就是下面的流程。

1 网易云音乐让用户跳转到 QQ
2 QQ 要求用户登录,然后询问"网易云音乐要求获得 xx 权限,你是否同意?"
3 用户同意,QQ 就会重定向回网易云音乐,同时发回一个授权码。
4 网易云音乐使用授权码,向 QQ 请求令牌。
5 QQ返回令牌.
6 网易云音乐使用令牌,向 QQ 请求用户数据。

参考阮一峰的三篇讲Oauth2.0的文章:
Oauth2.0 的简单解释:
http://www.ruanyifeng.com/blog/2019/04/oauth_design.html

Oauth2.0 的四种方式:http://www.ruanyifeng.com/blog/2019/04/oauth-grant-types.html

Oauth2.0 第三方登录教程:http://www.ruanyifeng.com/blog/2019/04/github-oauth.html

(完)

(完)