在不久前的文章中,我們聊到了 IAM、OIDC 與 CI/CD Pipeline 的串接,確保自動化流程可以安全地跟 AWS 互動。
不過,我們的專案(多人協作的時間表平台)真正需要的,是一套「讓使用者可以註冊、登入、驗證身分」的機制。這時候,Cognito 就會正式登場!
想像一下,假如我們的專案需要:
這些功能若要自己從零寫,會牽涉到:密碼加密、驗證 Token、第三方登入、憑證交換…
幾乎每個 App 都需要,但我們絕不希望每次都得重造輪子對吧
這就是 Cognito 存在的價值 透過強大的集成幫我們處理「身份管理」這件事
舉個簡單的例子,"Continue with Google"
大家應該都很熟悉這種場景
進入一個新網站後,馬上看到「用 Google / Facebook / Apple 登入」的介面
按一下之後,網頁跳出去又跳回來,然後就登入了
這個流程其實就是 Cognito + 第三方登入 (Federation) 可以幫你實現的事情
在 Free Tier 中,整合 Google 登入完全免費(只要你月活躍使用者不超過 50,000 人)。
用戶不用自己建立帳號,點「Google 登入」就能使用
功能面向 | User Pool | Identity Pool |
---|---|---|
角色定位 | 使用者目錄 (User Directory) | 給特定身分權限 (Federated Identity) |
主要用途 | 管理使用者帳號與登入流程 | 將已驗證的使用者對應到 AWS 資源存取權限 |
處理內容 | 註冊、登入、密碼規則、多因素驗證 (MFA)、使用者屬性 (email、phone 等) | 將 User Pool 簽發的 Token 換成 AWS STS 臨時憑證 |
使用者 | App 與最終使用者(取得 JWT Token) | App 與 AWS(決定可存取哪些 AWS 資源) |
範例流程 | 使用者 Email 註冊 → 驗證格式 & 密碼強度 → 登入成功取得 JWT Token | 登入後將 JWT Token 交給 Identity Pool → 分配「只能讀取 S3」或「可寫入 DynamoDB」的 IAM Role |
小結:
但在我們的專案中,實際上負責寫入資料的都是Lambda而非使用者,所以比較用不到Identity Pool
如果我們單純用 SDK 來整合 Cognito,會需要自己處理:
聽起來很麻煩吧?
這時候 AWS Amplify 就幫我們省下許多功夫。
Amplify 提供:
在接下來的實作裡,我們會用 Amplify 來當「前端跟 Cognito 的橋樑」。
當使用者透過 Cognito 成功登入後,系統不會只告訴你「登入成功」,而是會發給你一張 JWT,就像是雲端身份證或通行證一樣。
JWT 是由三個部分組成的字串,格式如xxxxx.yyyyy.zzzzz
Header(標頭)
HS256
或 RS256
){
"alg": "RS256",
"typ": "JWT"
}
Payload(有效載荷)
sub
: 使用者唯一識別 IDemail
: 使用者 Emailexp
: Token 過期時間(Unix Timestamp)iat
: 簽發時間(Issued At){
"sub": "a1b2c3d4e5",
"email": "user@example.com",
"iat": 1690000000,
"exp": 1690003600
}
Signature(簽名)
換句話說,JWT 就是使用者的雲端身份證,API 看到它就知道「你是誰」以及「你可以做什麼」。
回顧一下,我們的多人協作時間表平台需要:
Cognito 將扮演:
今天的內容中我們介紹了Cognito的使用情境以及概念上的內容,在今天了解了Cognito在我們專案中的定位後,明天我們就將在Console中認識Cognito的配置,並介紹對應的CDK程式碼,配合前端網站實作演示一個使用者登入的流程!敬請期待囉