深入淺出 OpenID Connect (二)

OpencID Connect中的三個常用流程介紹

前言

在本系列文上篇從授權機制 OAuth2 的角度切入,介紹了如何以授權機制為基礎,建構認證協議,並分析其可行性與挑戰。另一方面,也初步介紹了 OpenID Connect (以下稱之為 OIDC)中的角色關係與 OIDC 中的常用的 Token (主要分為 Access token 與 ID token)。而本文將透過介紹 OIDC 規格中提供的三種認證流程,來說明 OIDC 中不同角色之間的互動關係,並補充在實作時,需要注意的相關細節 (如:scope定義與其他相關擴充協議等等)

流程介紹

以下介紹的各種流程其實就是考慮 OIDC 在面臨各種不同軟體架構時,利用排列組合的方法來預設不同的情境,並提供最適合的流程解決方案。各個 Flow 的概覽如下表所示:

OIDC 中各流程概覽

以下分別將深入圖解各個 Flow 的流程,並說明相關實作細節:

Authorization Code Flow 流程概述

  • RP 收集與認證請求 (Authentication request)相關的參數
  • RP 向 IdP 發送 Request
  • IdP 認證 End-User 的身分
  • IdP 取得 End-User 對 RP 存取權限的即時授權
  • IdP 將 End-User redirect 回 RP 並同時攜帶 authorization code
  • RP 向 Token endpoint 發送帶有 authorization code 的請求
  • Token endpoint 返回一個帶有 ID token 與 Access token 的 response (在 response body 中)
  • RP 驗證 ID token 中的訊息,並從中取得 End-User’s Subject Identifier
Authorization Code Flow

Implicit Flow 流程概述

  • RP 收集與認證請求 (Authentication request)相關的參數
  • RP 向 IdP 發送 Request
  • IdP 認證 End-User 的身分
  • IdP 取得 End-User 對 RP 存取權限的即時授權
  • IdP 直接向 End-User 回傳 ID token,如果 RP 有在認證請求的參數中要求 Access token,IdP 也會同時返回 Access token
  • RP 驗證 ID token 中的訊息,並從中取得 End-User’s Subject Identifier
Implicit Flow

Hybrid Flow 流程概述

  • RP 收集與認證請求 (Authentication request)相關的參數
  • RP 向 IdP 發送 Request
  • IdP 認證 End-User 的身分
  • IdP 取得 End-User 對 RP 存取權限的即時授權
  • IdP 將 End-User redirect 回 RP 並同時攜帶 authorization code,也可能同時攜帶 ID token 或 Access token (要看認證請求參數中的 Response Type 而定)
  • RP 向 Token endpoint 發送帶有 authorization code 的請求
  • Token endpoint 返回一個帶有 (response body中) ID token 與 Access token 的 response
  • RP 驗證 ID token 中的訊息,並從中取得 End-User’s Subject Identifier
Hybrid Flow

OIDC 中其他特性補充

  • ID token 中因帶有相關使用者資料,所以通常具有較短的時效 (例如:數分或數秒)
  • Access token 與 Refresh token 由於不帶有認證資訊,故具有較長的時效 (RP不能把 token 當作認證的象徵)
  • IdP 或是 End-user 可以以安全性為由,隨時撤回在時效期間的 token 之效力

OIDC 規格中對於 Scope 的定義

在 OAuth2 中,Scope 用來劃定特定 token 能夠存取 protected resource 的範圍。OIDC 也有針對 Scope 的相關定義,主要包含:profile, email, address, phone,這些 scope 被定義來回傳一組 claim。此外,一個 Access token 也可以被 mapping 到多個 scope。 詳細資料可以參考 OIDC 官方文獻中的規格

OIDC 之相關延伸協議

OIDC的延伸協議可以幫助開發人員建置更完整的認證系統,最主要的兩個協議如下:

由於此部分以超出本文的範圍,故詳細部分可以參考 OIDC 官方網站所提供的規格書。

結語

這個系列文除了紀錄自己在研究所生活中所學,也希望幫助對 OpenID Connect 等相關認證協議有興趣的開發人員。API security 等資安議題在現在的大數據與物聯網時代越來越重要,如何認證使用者的身分,對一個資源或裝置提供者來說,也是一個非常值得探討的議題,而 OIDC 正恰好提供一個有效的即時授權的認證解決方案,提供了開發人員更為彈性的選擇。

參考文獻

[1] OAuth2 in Action

[2] Sakimura, N., Bradley, J., Jones, M., De Medeiros, B., & Mortimore, C. (2014). Openid connect core 1.0. The OpenID Foundation, S3.

非常感謝讀完本篇文章,希望本文能對你有些幫助,記得按拍手給我一些鼓勵,Medium 文章中一個人最多能按 50 下 XDD

喜歡我的文章的話也歡迎訂閱我的mediumfacebook,我會定期分享關於軟體工程的知識,還有在日本工作與生活的心得。

--

--

Shun's Blog | 東京開發者生活
Shun's Blog | 東京開發者生活

Written by Shun's Blog | 東京開發者生活

東京涉谷IT企業軟體工程師 | 日本生活、軟體技術、科技趨勢、區塊鏈技術分享

No responses yet