OAuth2的基本概念的理解

書籍推薦

OAuth2 in Action -- 原理git

OAuth2 Cookbook -- 實踐github

OAuth2 解決的問題域
  1. 開放系統間受權
  • 社交聯合登陸
  • 開放API平臺
  1. 現代微服務安全
  • 單頁瀏覽器App(HTML5/JS/無狀態)
  • 無線原生App
  • 服務器端WebApp
  • 微服務和API間調用
  1. 企業內部應用認證受權(IAM/SSO)

OAuth2的原理

OAuth2的最簡嚮導能夠很清楚的說明.簡單明瞭(地址在https://github.com/MissWangLove/Micro-Service中的pdf下面).算法

應用請求資源服務器,訪問客戶數據,在沒有OAuth2的狀況下,資源服務器區分不出請求過來的應用是惡意用戶仍是其餘用戶,數據都會返回. 有了OAuth2以後,使用受權服務器頒發給客戶應用Access Token, 資源服務器拿到Access Token進行校驗,驗證經過以後才返回數據.瀏覽器

總體的流程就是:
客戶應用向受權服務器請求Sccess Token ---> 受權服務器向用戶徵詢意見,是否將權限授予客戶應用 ---> 用戶贊成 ---> 受權服務器生成頒發Access Token給客戶應用 ---> 客戶應用請求資源服務器 ---> 資源服務器驗證客戶應用的Access Token ---> 驗證經過,返回數據.安全

涉及到三個角色:服務器

  • 客戶應用(請求資源方)
  • 受權服務器(生成Access Token並頒發Access Token)
  • 資源服務器(驗證Access Token,返回資源)

OAuth2的定義

什麼是Oauth2
  1. OAuth2是用於REST/APIs的代理受權框架(delegated authorization framework)
  2. 是基於令牌Token的受權,在無需暴露用戶密碼的狀況下,是應用能獲取對用戶數據有限訪問權限
  3. 解耦認證和受權
  4. 標準安全框架,支持多種用例場景
  • 服務器端WebApp
  • 瀏覽器單頁SAP
  • 無線/原生App
  • 服務器對服務器之間
令牌類比僕從鑰匙(Valet Key)

也就是給應用有限的訪問權限,讓應用可以表明用戶去訪問用戶的數據.session

舉個簡單例子,讓別人去你家取東西,將鑰匙給他,東西在大廳,他僅僅能進入大廳,臥室的門和其餘櫃子的鑰匙並無給他,也就沒有權限進行訪問.架構

因此說關鍵點在於有限的訪問權限,這個很重要.框架

OAuth2的優勢和缺點

優勢:微服務

  • OAuth2.0比1.0更容易實現
  • 更安全,客戶端不接觸用戶密碼,服務器端更易於集中保護
  • 普遍傳播並被持續使用
  • 短壽命和封裝的token
  • 資源服務器和受權服務器解耦
  • 集中式受權,簡化客戶端
  • HTTP/JSON友好,易於請求和傳遞token
  • 考慮多種客戶端架構場景
  • 客戶能夠具備有不一樣的信任級別

缺點:

  • 協議框架太寬泛,形成各類實現的兼容性和相互操做性差
  • 和OAuth1.0不兼容
  • OAuth2.0不是一個認證協議(是受權協議),OAuth2.0自己並不能告訴你任何用戶信息.
OAuth2.0主要角色
  • 資源擁有着(RO): 資源的擁有人,想要分享某些資源給第三方應用
  • 客戶應用: 一般是一個Web或者無線應用,須要訪問用戶的受保護資源
  • 資源服務器: Web站點或者Web service API,用戶的受保護數據存在此處
  • 受權服務器:客戶應用成功認證並得到受權以後,向客戶應用頒發訪問令牌Access Token
OAuth術語
  • 客戶憑證: 客戶的clientId和密碼用於認證客戶
  • 令牌: 受權服務器在接收到客戶請求後,頒發的訪問令牌
  • 做用域: 客戶請求訪問令牌時,由資源擁有者額外指定的細分權限(permission)
OAuth2的令牌類型
  • 受權碼(Authorization Code Token): 僅用於受權碼受權類型,用於交換獲取訪問令牌和刷新令牌
  • 刷新令牌(Refresh Token): 用於去受權服務器獲取一個新的訪問令牌
  • 訪問令牌(Access Token): 用於去表明一個用戶或服務直接去訪問受保護的資源.
  • Bearer Token: 無論誰拿到Token,均可以訪問資源,像現鈔
  • Proof of Possession(PoP Token): 能夠校驗client是否對Token有名確的擁有權

訪問令牌是最重要的.

OAuth2.0誤解
  • OAuth並無支持HTTP之外的協議
  • OAuth並非一個認證協議
  • OAuth並無定義受權處理機制
  • OAuth並無定義token格式
  • OAuth2.0並無定義加密算法
  • OAuth2.0並非單個協議
  • OAuth2.0僅是受權框架,僅用於受權處理

OAuth的本質就是如何獲取token和如何使用token.
OAuth是一種在系統間的代理受權協議(delegation authorization)
OAuth提供一個寬泛的協議框架,具體安全場景須要定製
OAuth使用代理協議的方式解決密碼共享反模式問題

OAuth2.0的典型模型

受權碼模式

受權碼模式

簡化模式(適用於單頁應用)

簡化模式

密碼模式

密碼模式

客戶端模式

客戶端模式

刷新令牌如何簡化令牌的獲取

刷新令牌

模式選型

受權流程渠道(channels)

channels

客戶應用類型

oauth client

四中OAuth2.0受權類型(Flows)

flows

受權類型選擇 ~ 流程

select

OAuth的極簡pdf: https://github.com/MissWangLove/Micro-Service/tree/master/pdf

相關文章
相關標籤/搜索