惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

N
News and Events Feed by Topic
T
The Exploit Database - CXSecurity.com
P
Palo Alto Networks Blog
T
Threat Research - Cisco Blogs
Cloudbric
Cloudbric
Recent Commits to openclaw:main
Recent Commits to openclaw:main
I
Intezer
Attack and Defense Labs
Attack and Defense Labs
P
Privacy International News Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
L
Lohrmann on Cybersecurity
C
Cybersecurity and Infrastructure Security Agency CISA
V2EX - 技术
V2EX - 技术
AWS News Blog
AWS News Blog
O
OpenAI News
L
LINUX DO - 最新话题
N
News | PayPal Newsroom
PCI Perspectives
PCI Perspectives
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Troy Hunt's Blog
Latest news
Latest news
D
Darknet – Hacking Tools, Hacker News & Cyber Security
A
Arctic Wolf
Spread Privacy
Spread Privacy
G
GRAHAM CLULEY
T
Tor Project blog
博客园_首页
Know Your Adversary
Know Your Adversary
有赞技术团队
有赞技术团队
S
Secure Thoughts
美团技术团队
Apple Machine Learning Research
Apple Machine Learning Research
爱范儿
爱范儿
T
Tailwind CSS Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
V
Visual Studio Blog
J
Java Code Geeks
Cisco Talos Blog
Cisco Talos Blog
Schneier on Security
Schneier on Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
S
Security Affairs
Jina AI
Jina AI
人人都是产品经理
人人都是产品经理
雷峰网
雷峰网
宝玉的分享
宝玉的分享
量子位
Last Week in AI
Last Week in AI
月光博客
月光博客
罗磊的独立博客
S
SegmentFault 最新的问题

Just lepture

我用 AI 造新語 丟失的表達欲 註冊郵箱攻擊 個人域名郵箱免費方案 Markdown on ruby markup Display country flags emoji on Windows 週記,垂死病中驚坐起 程序員與文學衝突 Fireside 遷移記 Typlog 三週年 How to style RSS feed 談談獨立播客 貓與網絡暴力 那霸的夜 Authlib Under BSD License PyCon JP 2018 記 夜思 Structure of a Flask Project Announcement of Authlib 三藩記 佐渡與阿賀町記 週記,九月末 前端的基礎修養:ARIA Live Regions 週記,九月三週
摩登 OAuth 2.0:簡介
2018-09-11 · via Just lepture

OAuth 2.0 開發者應該不陌生。其正式發表至今已逾六年,加之眾多知名公司使用,圍繞著這些公司的開放(或偽開放)平台,開發者也越來越多,名氣也就愈發響亮了。但是認真讀過標準的卻沒有多少人,不按標準來實現 OAuth 2.0 服務的公司不可勝數。而況這些年里,OAuth 2.0 又有許多新的標準規範誕生。我因為在寫 Authlib1,相關的標準略有閱讀,或有所得,不才分享一二,但求解惑三四人。

歷史

OAuth 的歷史最早可追溯到 2006 年 11 月,Twitter 需要一套 API 的授權訪問方案,彼時並沒有一套開放的標準規範來實現 API 的授權。由 Twitter 的開發者 Blaine Cook 首倡2,最終於 2007 年 7 月完成了 OAuth 的初版草案。2007 年 12 月 4 日 OAuth Core 1.0 正式發佈。

這是 OAuth 1.0 的歷史。其後 OAuth 1.0 進入 IETF,2010 年 4 月 RFC5849 發佈。這期間,即 2009 年 IETF 成立了一個 OAuth 工作組,後來的 OAuth 2.0 正是由這個工作組創建的,用以取代 OAuth 1.0。

無論是 OAuth 1.0 還是 OAuth 2.0,他們解決的都是同一個問題,即「如何讓一個應用在用戶的授權下訪問操作用戶授權的有限資源」。

框架

OAuth 2.0 與 OAuth 1.0 並不兼容,其實是個全新的體系。不同於 OAuth 1.0,OAuth 2.0 是一個框架,而 OAuth 1.0 是一個協議3。框架,意味著開發者可以在 OAuth 2.0 這一體系里添磚加瓦,修補 OAuth 2.0 的不足,亦可以利用其構建新的協議。

時至今日,OAuth 2.0 框架體系里已經誕生了許多標準協議,亦有許多草案等待完善。除卻最初的 RFC6749 (OAuth 2.0 Framework) 和 RFC6750 (Bearer Token),這裡列舉些許別的 RFC:

  1. RFC7009: OAuth 2.0 Token Revocation
  2. RFC7519: JSON Web Token
  3. RFC7523: JSON Web Token (JWT) Profile for OAuth 2.0 Client Authentication and Authorization Grants
  4. RFC7591: OAuth 2.0 Dynamic Client Registration Protocol
  5. RFC7636: Proof Key for Code Exchange by OAuth Public Clients

發現沒有,就連 JWT 亦是 OAuth 工作組起草的。更全面的 RFC 列表可參考 OAuth Status Page

角色

在 OAuth 2.0 框架內,通常有 4 種角色。分別是:

  1. Resource Owner:資源所有者。例如一個圖片分享網站,圖片就是資源,而圖片的上傳者便是資源所有者,通常便是這個圖片分享網站的用戶。
  2. Resource Server:資源服務。提供訪問這些圖片數據的 API。
  3. Client:客戶端。例如能訪問這個圖片分享網站的 iOS App。
  4. Authorization Server:認證服務。在資源所有者的允許下,提供訪問權限給客戶端。

有時你能明顯感受到這些角色的存在,有時則不然。但通常這四種角色都會存在於一個完整的 OAuth 2.0 授權訪問流程里,如圖所示:

OAuth Flow
一個完整的 OAuth 2.0 授權訪問流程

OAuth 2.0 的授權流程:

  1. 客戶端提供其自身的信息,在資源所有者的允許下,向認證服務請求 Access Token。
  2. 認證服務驗證通過後,返回 Access Token 給客戶端。
  3. 客戶端使用 Access Token 向資源服務請求用戶數據。
  4. 資源服務驗證 Access Token 有效後,返回資源數據。

須知,資源所有者的授權有多種方式,客戶端提供自身信息有多種方式,請求 Access Token 的方法亦有多種方式,便連返回的 Access Token 種類也可以有多種形態。而這些不同的方式不同的形態,在 OAuth 2.0 框架體系里是可以擴展的,隨著時間的推移,會有更多的草案變成標準,亦會有更多人提出其他草案。

  1. Authlib -- The ultimate Python library in building OAuth and OpenID Connect servers. Start it on GitHub lepture/authlib.↩

  2. OAuth started around November 2006, while Blaine Cook was working on the Twitter OpenID implementation. Read more

  3. RFC5849: The OAuth 1.0 Protocol vs RFC6749: The OAuth 2.0 Authorization Framework