OAuth2
概念
OAuth 2.0 規範定義了一個受權(delegation)協議,OAuth2.0 不是認證協議。瀏覽器
OAuth解決的大部分問題在於Client和被訪問的資源之間的鏈接上,在用戶不存在的狀況下,使用這種委託訪問。安全
流程
上圖ABCDE這5個步驟,既是完整的獲取訪問令牌的一個過程,其中:服務器
- Client 爲第三方應用程序,
- resource owner 爲資源全部者
- user-agent 爲相似瀏覽器的代理
- authorization server 受權服務器
- resource server 資源服務器
流程以下:ide
- A) Client使用瀏覽器(User-Agent)訪問Authorization server。也就是用瀏覽器訪問一個URL,這個URL是Authorization server提供的,訪問的Client須要提供(客戶端標識client_id,受權範圍scope,本地狀態state和redirect_uri)這些參數。
- B) Authorization server驗證Client在(A)中傳遞的參數信息,若是無誤則提供一個頁面供Resource owner登錄,登錄成功後選擇Client能夠訪問Resource server的哪些資源以及讀寫權限。
- C) 在(B)無誤後返回一個受權碼(Authorization Code)給Client。
- D) Client拿着(C)中得到的受權碼(Authorization Code)和(客戶端標識、redirect_uri等信息)做爲參數,請求Authorization server提供的獲取access token。
- E) Authorization server返回access token和可選的refresh token 以及令牌有效時間等信息給Client。
- F) client拿到access token後就能夠去resources server訪問resource owner的資源
OIDC
定義了一種基於OAuth2的用戶身份認證spa
OIDC的核心在於在OAuth2的受權流程中,一併提供用戶的身份認證信息(ID Token)給到第三方客戶端,ID Token使用JWT格式來包裝,得益於JWT(JSON Web Token)的自包含性,緊湊性以及防篡改機制,使得ID Token能夠安全的傳遞給第三方客戶端程序而且容易被驗證。此外還提供了UserInfo的接口,用於獲取用戶的更完整的信息代理
流程
- RP發送一個認證請求給OP;
- OP對EU進行身份認證,而後提供受權;
- OP把ID Token和Access Token(須要的話)返回給RP;
- RP使用Access Token發送一個請求UserInfo EndPoint;
- UserInfo EndPoint返回EU的Claims。
術語:server
- EU:End User:一我的類用戶。
- RP:Relying Party ,用來代指OAuth2中的受信任的客戶端,身份認證和受權信息的消費方;
- OP:OpenID Provider,有能力提供EU認證的服務(好比OAuth2中的受權服務),用來爲RP提供EU的身份認證信息;
- ID Token:JWT格式的數據,包含EU身份認證的信息。
- UserInfo Endpoint:用戶信息接口(受OAuth2保護),當RP使用Access Token訪問時,返回受權用戶的信息,此接口必須使用HTTPS
- AuthN & AuthZ: AuthN表明authentication AuthZ 表明authrization