OAuth 2.0
交流群 375462817
視頻教程 https://space.bilibili.com/476513143
標(biāo)準(zhǔn)
https://tools.ietf.org/html/rfc6749
是什么
OAuth 2.0 授權(quán)框架使得第三方可以獲取對用戶資源的訪問(有限訪問或者完全訪問)驶拱。
舉個(gè)例子:通過你的允許喘漏,bilibili 可以去微信服務(wù)器獲取你的頭像,昵稱,openid 等等。
為什么
傳統(tǒng)授權(quán)方式,用戶和第三方共享密碼遗嗽。缺點(diǎn)如下:
- 未來可能持續(xù)需要訪問各種受限資源。所以第三方要存儲用戶密碼鼓蜒,一般情況密碼是明文痹换,顯然不安全。
- 第三方將可以訪問所有的資源友酱,而實(shí)際上它只應(yīng)當(dāng)有權(quán)限訪問部分資源晴音。
- 用戶不能撤銷單個(gè)第三方的訪問權(quán)限柔纵。改密碼缔杉,所有第三方都會失效。
術(shù)語
案例:用戶通過“微信登陸”登陸 bilibili 搁料。
專業(yè)稱呼 | 通俗叫法 |
---|---|
資源所有者 | 用戶 |
資源服務(wù)器 | 保存用戶信息的服務(wù)器并且能夠驗(yàn)證令牌是否合法(比如說或详,微信服務(wù)器系羞,保存你的微信頭像等) |
客戶端 | 第三方應(yīng)用程序(比如說,bilibili) |
授權(quán)服務(wù)器 | 發(fā)送令牌給第三方的服務(wù)器(可以和資源服務(wù)器是同一個(gè)) |
授權(quán)碼模式霸琴、隱式模式椒振、密碼模式、客戶端模式
授權(quán)碼模式(適用前后端分離)
最常用的模式梧乘,微信澎迎、QQ、Github 登陸第三方網(wǎng)站就是這種模式选调。優(yōu)點(diǎn)前后端分離夹供,避免令牌泄露。
- 嗶哩嗶哩提供一個(gè)“微信登陸”的鏈接仁堪,用戶點(diǎn)擊跳轉(zhuǎn)到微信授權(quán)服務(wù)器哮洽。
- 用戶根據(jù)微信授權(quán)服務(wù)器提示登陸微信并確認(rèn)授權(quán)給嗶哩嗶哩。
- 微信授權(quán)服務(wù)器返回用戶代理(瀏覽器)一個(gè)授權(quán)碼弦聂。
- 用戶代理(瀏覽器)把這個(gè)授權(quán)碼傳給嗶哩嗶哩鸟辅。
- 嗶哩嗶哩憑借授權(quán)碼向微信授權(quán)服務(wù)器請求令牌。
- 微信授權(quán)服務(wù)器發(fā)送令牌給嗶哩嗶哩莺葫。
之后嗶哩嗶哩就可以帶著令牌去微信資源服務(wù)器讀取用戶資料匪凉。
三個(gè)問題:
- 為什么要有授權(quán)碼?
- 為什么要重定向捺檬?
- 授權(quán)碼為什么不直接返回給 bilibili 洒缀?
隱式模式(不推薦使用)(適合沒有后臺的第三方)
- 嗶哩嗶哩提供一個(gè)“微信登陸”的鏈接,用戶點(diǎn)擊跳轉(zhuǎn)到微信授權(quán)服務(wù)器欺冀。
- 用戶根據(jù)微信授權(quán)服務(wù)器提示登陸微信并確認(rèn)授權(quán)給嗶哩嗶哩树绩。
- 微信授權(quán)服務(wù)器發(fā)送令牌給嗶哩嗶哩。
https://weixin.com/oauth/authorize?
response_type=token&
client_id=123&
redirect_uri=http://www.bilibili.com/callback&
scope=read
密碼模式(適合用戶極其信任第三方)
- 嗶哩嗶哩使用用戶給的微信登陸賬號和密碼直接向微信授權(quán)服務(wù)器索要令牌隐轩。
- 微信授權(quán)服務(wù)器發(fā)送令牌給嗶哩嗶哩饺饭。
https://weixin.com/token?
grant_type=password&
username=張三&
password=123456&
client_id=123
客戶端模式(適合沒有前端的第三方,整個(gè)過程沒有用戶參與)
- 嗶哩嗶哩向微信授權(quán)服務(wù)器請求令牌职车。
- 微信授權(quán)服務(wù)器發(fā)送令牌給嗶哩嗶哩瘫俊。
https://weixin.com/token?
grant_type=client_credentials&
client_id=123&
client_secret=xxxxx