iT邦幫忙

2021 iThome 鐵人賽

DAY 13
1
Software Development

用Keycloak學習身份驗證與授權系列 第 13

Day12 - 【概念篇】OAuth flows: flows這一小段路上路前注意事項

本系列文之後也會置於個人網站


其實我原本是想要 RESTer 幹到底的哈?。

今天有一點是插話的。考慮到接下來幾天的內容,所使用到的工具會有點多樣,所以行前做個提醒。

首先,你最好了解:

  • HTTP Request / Response
  • HTTP API (Web API)
  • JSON
  • BASE64

諾對於Postman這類工具有所熟悉再好不過。但接者幾天會使用:

  • RESTer
  • curl
    有一些情況會直接使用。
  • python
    主要用於格式化JSON。

除此之外,如果熟悉Bash的話同樣也有助於理解所有內容。此外還有可能會使用到 OAuth Toolsjwt.io 。(JWT的部分更有可能出現在之後關於Open-Id內容前後)

但其實,以上並非全部都是必須。最重要的是希望你能夠學習到OAuth本身的部分。

首先,起初的OAuth設計是基於HTTP的,但其實有相當多細節有多種方式實現。

接者,除了之前提到的客戶端、資源擁有者、受保護的資源(資源伺服器)外和授權伺服器外,客戶端又將拆分成前端客戶端與後端客戶端。
通常前端客戶端指的是瀏覽器;而後端客戶端是實際需要取得存取權杖(Access Token)的服務程式,通常也意味著其實是需要受保護的資源。
前端與後端有可能其實就是同一支程式;還有可能是不同程式外,更可以是沒有直接關係的程式。簡單整理一下:

  • 資源擁有者/取用者:
    實際擁有資源,或已經擁有授權的使用者。在系統上是用戶帳號,但通常指自然人。
  • 前端客戶端:
    要求用戶進行驗證授權。通常為瀏覽器。
  • 後端客戶端:
    實際執行業務邏輯、提供服務。需要取得存取權杖(Access Token),進而存取受保護的資源。
  • 資源伺服器:
    管理、保護需受保護資源。
  • 驗證/授權伺服器:
    驗證資源擁有者,並提供存取權杖授權給客戶端。

而通常的行為流程如下:

  1. 資源擁有者 透過瀏覽器登入
  2. 授權伺服器 驗證身分並確認授權
  3. 授權給客戶端
  4. 客戶端 取得受保護資源
  5. 客戶端 提供 資源擁有者 服務

RFC 6749的圖:

     +--------+                               +---------------+
     |        |--(A)- Authorization Request ->|   Resource    |
     |        |                               |     Owner     |
     |        |<-(B)-- Authorization Grant ---|               |
     |        |                               +---------------+
     |        |
     |        |                               +---------------+
     |        |--(C)-- Authorization Grant -->| Authorization |
     | Client |                               |     Server    |
     |        |<-(D)----- Access Token -------|               |
     |        |                               +---------------+
     |        |
     |        |                               +---------------+
     |        |--(E)----- Access Token ------>|    Resource   |
     |        |                               |     Server    |
     |        |<-(F)--- Protected Resource ---|               |
     +--------+                               +---------------+

                     Figure 1: Abstract Protocol Flow


上一篇
Day11 - 【概念篇】OAuth 2.0 flows
下一篇
Day13 - 【概念篇】OAuth flows: Password Grant (Legacy)
系列文
用Keycloak學習身份驗證與授權32

尚未有邦友留言

立即登入留言