Cognito 101
以健身房比喻說明 Cognito 的 User Pool、User Pool Client、Identity Pool,並比較 OAuth、OIDC 與 SAML。
問題
- Cognito 裡面各個元件分別用途是什麼?關係是什麼?
- 為什麼可以接去 PostgreSQL?如果不接 PostgreSQL 的話,登入資訊存在哪裡?
Cognito Overview
可以把 cognito 想像成健身房會員系統
- User Pool → 會員名單 📋
- 存放了所有註冊的會員(使用者)資訊
- 可以使用 Google / Facebook / 帳號密碼等方式登入
- 負責身份驗證(Authentication)確認這個人是否為會員
- User Pool Client → 大門讀卡機 🚪
- 讀卡機 (User Pool Client) 會去會員名單 (User Pool) 檢查你是不是會員
- User Pool Client 只是 API 入口,沒有存會員資料,用於幫助 app 連接 User Pool
- Identity Pool → 健身設施權限 🎟️
- 負責授權 (Authorization),透過 IAM role 讓使用者可以存取 AWS 服務
- 如果 app 不需要使用 AWS 服務,則不需要宣告 Identity pool
Postgres 當作 user pool 之後,還有需要另外建立 user pool 這個 resource 嗎?
- 需要,因為 User Pool 還支援以下幾個功能,讓 application 端不用處理身份驗證
- OAuth 2.0 / OIDC / SAML
- 讓應用程式可以使用標準身份驗證協議,不用開發身份驗證流程
- JWT token 產生與管理
- App 端只需要驗證 token,簡化開發流程
- MFA / Password Reset / Social Login
- 與 AWS 服務整合
📎 關於 Auth 的協定:OAuth & OIDC & SAML
- OAuth:對已被驗證身份的 user 授予存取資源的權力 → 處理 authorization,步驟:
- App 向 IdP 請求存取用戶資料
- IdP 跳出授權畫面,問用戶是否允許 app 存取資料
- 點擊同意後,IdP 會發給 app 一個 Access Token
- App 使用 Access Token 來取的用戶資料
- OIDC:→ 處理 authentication,步驟:
(新)
- User 登入 app 時會先被導向 IdP (Identity Provider) 進行登入 (authentication)
- 驗證成功後,IdP 會生成一個 JWT Token 傳給 app
- App 解析 ID Token,確認使用者身份後建立 Session
- SAML:→ 處理 authentication,讓企業內部或 B2B 系統進行 SSO
(舊)
- 流程基本上跟 OIDC 一樣,只是 token 是 XML 格式