【每週分享第2期】OAuth 2.0剖析

前言

OAuth 是一種受權機制。數據的全部者告訴系統,贊成受權第三方應用進入系統,獲取這些數據。系統從而產生一個短時間的進入令牌(token),用來代替密碼,供第三方應用使用。OAuth機制保證了令牌既可讓第三方應用得到權限,同時又隨時可控,不會危及系統安全。前端

令牌與密碼

1.令牌具備時效性, 到期會自動失效,用戶本身沒法修改;密碼通常長期有效,用戶不修改就不會變。
2.令牌具備即刻性,即數據全部者能夠隨時撤銷,一旦撤銷當即失效。
3.令牌有權限範圍,密碼則通常具有完整權限。

四種受權方式

  • 受權碼(authorization-code)
第三方應用先申請一個受權碼,而後再用該碼獲取令牌。
安全性最高,適用於那些有後端的 Web 應用。受權碼經過前端傳送,令牌則是儲存在後端,並且全部與資源服務器的通訊都在後端完成。這樣的先後端分離,能夠避免令牌泄漏。

image.png

(1) A網站跳轉 B網站
` https://b.com/oauth/authorize?
response_type=code&
client_id=CLIENT_ID&
redirect_uri=CALLBACK_URL&
scope=read`
(2) B網站就會跳回redirect_uri參數指定的網址
https://a.com/callback?code=A...
(3) A後端向 B網站請求令牌
https://b.com/oauth/token?
client_id=CLIENT_ID&
client_secret=CLIENT_SECRET&
grant_type=authorization_code&
code=AUTHORIZATION_CODE&
redirect_uri=CALLBACK_URL
  • 隱藏式(implicit)
令牌儲存在前端,沒有後端。

image.png

(1) 跳轉到 B 網站
https://b.com/oauth/authorize?
response_type=token&
client_id=CLIENT_ID&
redirect_uri=CALLBACK_URL&
scope=read
(2) 返回令牌
https://a.com/callback#token=...
  • 密碼式(password)
適用於其餘受權方式都沒法採用的狀況,並且必須是用戶高度信任的應用。
https://oauth.b.com/token?gra...
username=USERNAME&
password=PASSWORD&
client_id=CLIENT_ID
  • 憑證式
適用於沒有前端的命令行應用,即在命令行下請求令牌。
https://oauth.b.com/token? grant_type=client_credentials& client_id=CLIENT_ID& client_secret=CLIENT_SECRET
相關文章
相關標籤/搜索