Cognito 101

以健身房比喻說明 Cognito 的 User Pool、User Pool Client、Identity Pool,並比較 OAuth、OIDC 與 SAML。

發佈 ~1 分鐘 #cognito

問題

  • Cognito 裡面各個元件分別用途是什麼?關係是什麼?
  • 為什麼可以接去 PostgreSQL?如果不接 PostgreSQL 的話,登入資訊存在哪裡?

Cognito Overview

可以把 cognito 想像成健身房會員系統

  1. User Pool → 會員名單 📋
    • 存放了所有註冊的會員(使用者)資訊
    • 可以使用 Google / Facebook / 帳號密碼等方式登入
    • 負責身份驗證(Authentication)確認這個人是否為會員
  2. User Pool Client → 大門讀卡機 🚪
    • 讀卡機 (User Pool Client) 會去會員名單 (User Pool) 檢查你是不是會員
    • User Pool Client 只是 API 入口,沒有存會員資料,用於幫助 app 連接 User Pool
  3. Identity Pool → 健身設施權限 🎟️
    • 負責授權 (Authorization),透過 IAM role 讓使用者可以存取 AWS 服務
    • 如果 app 不需要使用 AWS 服務,則不需要宣告 Identity pool

Postgres 當作 user pool 之後,還有需要另外建立 user pool 這個 resource 嗎?

  • 需要,因為 User Pool 還支援以下幾個功能,讓 application 端不用處理身份驗證
    1. OAuth 2.0 / OIDC / SAML
      • 讓應用程式可以使用標準身份驗證協議,不用開發身份驗證流程
    2. JWT token 產生與管理
      • App 端只需要驗證 token,簡化開發流程
    3. MFA / Password Reset / Social Login
    4. 與 AWS 服務整合

📎 關於 Auth 的協定:OAuth & OIDC & SAML

  • OAuth:對已被驗證身份的 user 授予存取資源的權力 → 處理 authorization,步驟:
    1. App 向 IdP 請求存取用戶資料
    2. IdP 跳出授權畫面,問用戶是否允許 app 存取資料
    3. 點擊同意後,IdP 會發給 app 一個 Access Token
    4. App 使用 Access Token 來取的用戶資料
  • OIDC:→ 處理 authentication,步驟:(新)
    1. User 登入 app 時會先被導向 IdP (Identity Provider) 進行登入 (authentication)
    2. 驗證成功後,IdP 會生成一個 JWT Token 傳給 app
    3. App 解析 ID Token,確認使用者身份後建立 Session
  • SAML:→ 處理 authentication,讓企業內部或 B2B 系統進行 SSO (舊)
    • 流程基本上跟 OIDC 一樣,只是 token 是 XML 格式