本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
身分集區的範例應用程式
Amazon Cognito 身分集區的最常見使用案例是聯合來自多個登入系統的使用者,並將臨時、有限存取的 AWS 登入資料直接交付給用戶端。這樣就不需要為存取 AWS 資源的許可建置登入資料代理程式。例如,您可能需要讓使用者使用社交媒體帳戶登入,並從 Amazon S3 為您的行動應用程式存取應用程式資產。身分集區也會將登入資料提供給使用使用者集區登入的使用者。
在本教學課程中,您將建立一個 Web 應用程式,您可以在增強型和基本身分驗證流程中,透過身分集區中支援的身分提供者 (IdPs) 取得暫時驗證和訪客登入資料。如果您已在 Web 開發方面有經驗,請從 GitHub 下載範例應用程式。
從 GitHub 下載範例應用程式
此範例應用程式示範了 Amazon Cognito 身分集區的下列功能:
- 身分集區中的身分驗證流程
-
-
具有詳細 API 請求明細的增強型身分驗證流程
-
具有詳細 API 請求明細的基本身分驗證流程
- 實作訪客 (未驗證) 存取
-
- 與支援的身分提供者整合
-
- AWS 登入資料管理
-
-
交換臨時 AWS 登入資料的身分提供者字符
-
使用臨時登入資料安全地存取 AWS 服務
在開發 Web 伺服器上設定應用程式並在瀏覽器中存取應用程式後,您會看到下列選項。
先決條件
在開始之前,您將需要設定下列資源。
-
可存取 Amazon Cognito AWS 的帳戶。如果您沒有 AWS 帳戶,請遵循 中的指示入門 AWS。
-
在您的開發機器上安裝 Python 3.8 或更新版本。
-
GitHub 存取。
-
AWS 已設定登入資料,具有對 Amazon Cognito APIs許可。開發人員身分驗證需要這些登入資料。
如需在特定 SDK 中實作 AWS 登入資料和身分集區聯合的詳細資訊,請參閱 取得憑證。
身分驗證提供者設定
為了取得此應用程式的最佳結果,請設定並整合一或多個第三方身分提供者 (IdPs) 或 Amazon Cognito 使用者集區與您的 Amazon Cognito 身分集區。在您完成先決條件,並在執行此示範應用程式之前,選擇要設定的身分提供者。Amazon Cognito 主控台會逐步引導您設定身分集區和提供者的程序。
- Amazon Cognito 使用者集區
-
- 社交身分提供者
-
- OpenID Connect (OIDC) 供應商
-
- SAML 提供者
-
對於此示範應用程式,您不需要設定所有支援的身分提供者。您可以從符合您使用案例的 開始。每個連結都提供詳細的組態指示。
部署示範應用程式
複製儲存庫
-
開啟終端機視窗。
-
複製aws-doc-sdk-examples儲存庫,或在儲存庫中擷取此資料夾。
git clone https://github.com/awsdocs/aws-doc-sdk-examples.git
-
導覽至 專案目錄。
cd python/example_code/cognito/scenarios/identity_pools_example_demo/web
建立 身分集區
若要為您的應用程式建立 Amazon Cognito 身分集區,請遵循 中的指示身分集區主控台概觀。
設定示範應用程式的身分集區
-
開啟 Amazon Cognito 主控台。
-
從左側導覽功能表中,選擇身分集區。選擇現有的身分集區,或建立新的身分集區。
-
在使用者存取下,啟用已驗證存取和訪客存取。設定新的或現有的 IAM 角色,並為其指派您要授予每種使用者類型的許可。
-
在使用者存取下,設定您要設定的任何身分提供者。
-
在身分集區屬性下,啟用基本 (傳統) 身分驗證。
-
保持瀏覽器開啟至您身分集區的 主控台。您會在應用程式設定中使用身分集區 ID 和其他組態資訊。
下列步驟會引導您完成示範應用程式的初始設定。
探索身分集區中的身分驗證方法
本節使用 Amazon Cognito 身分集區示範應用程式,引導您完成基本和增強型身分驗證流程。透過此示範,您將了解身分集區如何與各種身分提供者搭配使用,為您的應用程式使用者提供臨時 AWS 憑證。
在範例應用程式的互動式示範區段中,您會先在身分集區支援的兩種存取類型之間進行選擇。
- 未驗證的 (訪客) 存取
-
提供 AWS 登入資料給尚未驗證的使用者。
- 已驗證的存取
-
使用完整範圍的可用許可交換 AWS 憑證的身分提供者字符。從您在 .env 檔案中設定的身分提供者中選擇身分提供者。
此步驟示範如何透過身分集區的訪客存取功能,取得未經驗證 (訪客) 使用者的臨時 AWS 登入資料。在示範應用程式中,您將測試增強型和基本流程,以了解身分集區如何發行登入資料,而不需要使用者登入。訪客存取使用與已驗證存取相同的 API 序列,但不提供身分提供者字符 (例如來自 Google、Facebook 的 OAuth 字符,或來自企業提供者的 SAML 聲明)。
如果您正在尋找提供使用者有限 AWS 存取權的相關資訊,而不需要身分驗證,請繼續閱讀。實作訪客存取後,您將了解如何安全地提供 AWS 登入資料給匿名使用者,並了解兩個身分驗證流程之間的差異。
未經驗證的存取可以向具有網際網路存取的任何人發出登入資料,因此最適合用於需要最低安全性 AWS 的資源,例如公有 APIs和圖形資產。在繼續此步驟之前,請檢查是否已在啟用訪客存取的情況下設定身分集區,並確保有適當的 IAM 政策來限制許可。
- Guest access with enhanced flow
-
增強型流程是一種簡化的方法,可為具有兩個 API 請求的未驗證使用者取得 AWS 憑證。
使用增強的流程測試訪客存取
-
在示範應用程式中,導覽至互動式示範區段
-
選擇訪客存取索引標籤。
-
選擇增強型流程索引標籤。
-
選擇測試訪客存取。
-
應用程式會從您的身分集區取得臨時 AWS 登入資料,而不需要額外的身分驗證提示。
-
身分驗證成功後,您將看到顯示結果面板的 Web 界面,並且您有兩個選項可以探索它們:
-
僅檢視登入資料按鈕:如果您想要直接查看在沒有 API 流程詳細資訊的情況下產生的臨時 AWS 登入資料,請選擇此按鈕。
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......",
"Expiration": "2025-08-07T00:58:21-07:00"
}
}
-
檢視詳細的 API 流程按鈕:如果您想要查看step-by-step請求,請選擇此按鈕。
-
GetId() 使用 提出 API 請求identityPoolId。訪客存取不需要身分驗證字符
{
"IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
如果有效,它會尋找或建立並傳回使用者的 IdentityID。範例回應如下所示:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
-
GetCredentialsForIdentity() 與傳回的 identityPoolId。
POST GetCredentialsForIdentity
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
Cognito 會驗證訪客存取、使用 在內部擔任未經驗證的角色 AWS STS,並傳回臨時 AWS 登入資料。(此呼叫沒有 IAM 身分驗證;角色信任必須允許 cognito-identity-amazonzaws.com。)
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......",
"Expiration": "2025-08-07T00:58:21-07:00"
}
}
- Guest access with basic flow
-
基本流程透過個別 API 請求,提供對身分擷取和憑證產生之身分驗證程序的精細控制。
使用基本流程測試訪客存取
-
在示範應用程式中,導覽至互動式示範區段
-
選擇訪客存取索引標籤。
-
選擇基本流程索引標籤。
-
選擇測試訪客存取。
-
應用程式會從您的身分集區取得臨時 AWS 登入資料,而不需要額外的身分驗證提示。
-
身分驗證成功後,您會看到顯示結果面板的 Web 界面,而且您有兩個選項可以探索它們。
-
僅檢視登入資料按鈕:如果您想要直接查看在沒有 API 流程詳細資訊的情況下產生的臨時 AWS 登入資料,請選擇此按鈕。
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......",
"Expiration": "2025-08-12T13:36:17-07:00"
}
}
-
檢視詳細的 API 流程按鈕:如果您想要查看step-by-step請求,請選擇此按鈕。
-
GetId() 具有您的身分集區 ID 的 API 請求。訪客存取不需要身分驗證字符。
POST GetId
{
"IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111"
}
如果有效,它會尋找或建立並傳回使用者的 IdentityID。範例回應如下所示:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222"
}
-
GetOpenIdToken() 與傳回的 IdentityID和相同的Logins映射
POST GetOpenIdToken
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222"
}
回應:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Token": "eyJraWQiOiJFWAMPLE......"
}
此步驟中發生的情況:Amazon Cognito 會從 cognito-identity.amazonaws.com 發出代表此 的短期 OpenID Connect Web 身分字符IdentityId。權杖包含 AWS STS 評估的 OIDC 宣告,包括 aud (您的身分集區 ID) 和 amr (已驗證或未驗證)。IAM 角色的信任政策必須要求這些宣告。
-
AssumeRoleWithWebIdentity() - 您的應用程式 AWS STS 會直接呼叫 ,以交換 Amazon Cognito OpenID 字符做為臨時 AWS 登入資料
POST sts:AssumeRoleWithWebIdentity
{
"RoleArn": "arn:aws:iam::111122223333:role/Cognito_IdentityPoolUnauth_Role",
"WebIdentityToken": "eyJraWQiOiJFWAMPLE......"
}
回應:
{
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "FwoGZXIvYXdzEEXAMPLE......"
}
}
在此步驟中發生的情況:驗證後: 會傳回臨時 AWS 登入資料
使用暫時登入資料
這些臨時登入資料可作為標準 AWS 登入資料,但具有身分集區未經驗證的 IAM 角色所定義的有限許可。您可以搭配任何 AWS SDK 或 使用它們 AWS CLI。如需使用登入資料設定 AWS SDKs 的詳細資訊,請參閱《 AWS SDKs和工具參考指南》中的標準化登入資料提供者。
以下範例並非完整清單,但它們顯示身分集區的訪客功能可以改善使用者體驗的常見方式。
下列範例會將登入資料提供者設定為訪客使用者的有限 Amazon S3 存取。
- Python
-
# Example: Using credentials with boto3
import boto3
# Configure client with temporary credentials
s3_client = boto3.client(
's3',
aws_access_key_id='AKIAIOSFODNN7EXAMPLE',
aws_secret_access_key='wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
aws_session_token='IQoJb3JpZ2luX2VjEEXAMPLE......'
)
# Make API requests within IAM role permissions
response = s3_client.list_objects_v2(Bucket='my-public-bucket')
# Access public content
for obj in response.get('Contents', []):
print(f"File: {obj['Key']}, Size: {obj['Size']} bytes")
- JavaScript
-
// Example: Accessing public content
import { S3Client, GetObjectCommand } from "@aws-sdk/client-s3";
const s3Client = new S3Client({
region: "us-east-1",
credentials: {
accessKeyId: 'AKIAIOSFODNN7EXAMPLE',
secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
sessionToken: 'IQoJb3JpZ2luX2VjEEXAMPLE......'
}
});
// Access public images or documents
const response = await s3Client.send(new GetObjectCommand({
Bucket: 'my-public-content',
Key: 'product-catalog.pdf'
}));
下列範例以訪客使用者身分使用 Amazon DynamoDB 的唯讀存取權。
- Python
-
# Example: Limited app functionality for trial users
import boto3
dynamodb = boto3.client(
'dynamodb',
aws_access_key_id='AKIAIOSFODNN7EXAMPLE',
aws_secret_access_key='wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
aws_session_token='IQoJb3JpZ2luX2VjEEXAMPLE......'
)
# Allow guest users to view sample data (limited to 5 items)
response = dynamodb.scan(TableName='SampleProducts', Limit=5)
- JavaScript
-
// Example: Limited app functionality for trial users
import { DynamoDBClient, ScanCommand } from "@aws-sdk/client-dynamodb";
const dynamodbClient = new DynamoDBClient({
region: "us-east-1",
credentials: {
accessKeyId: 'AKIAIOSFODNN7EXAMPLE',
secretAccessKey: 'wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY',
sessionToken: 'IQoJb3JpZ2luX2VjEEXAMPLE......'
}
});
// Allow guest users to view sample data (limited to 5 items)
const response = await dynamodbClient.send(new ScanCommand({
TableName: 'SampleProducts',
Limit: 5
}));
此步驟會探索搭配 Amazon Cognito 身分集區使用社交身分提供者的整體流程。社交身分驗證提供熟悉的登入體驗,同時透過聯合身分管理來維護安全性。您可以從 Google、Facebook 和 Amazon 等社交身分提供者 (IdP) 登入,然後將該 IdP 字符交換為臨時 AWS 憑證。身分集區也支援 Twitter 和 Apple 整合,但在範例應用程式中不支援。
身分集區本身不是使用者目錄。它不會存放密碼或設定檔欄位。相反地,它信任外部 IdPs 來驗證使用者,並專注於透過為 IAM 角色提供憑證,授權已驗證的使用者直接呼叫 AWS 服務。
- Social identity provider with enhanced flow
-
本節說明如何使用社交身分提供者登入使用者,並使用增強型流程,在 Amazon Cognito 身分集區中交換提供者字符,以請求 AWS 資源。
使用社交登入搭配範例應用程式中的增強流程
-
在示範應用程式中,導覽至互動式示範區段
-
選擇已驗證的存取索引標籤。
-
選擇增強型流程索引標籤。
-
選擇您已設定的支援社交供應商,例如使用 Google 登入、使用 Facebook 登入或使用 Amazon 登入。
-
登入並同意與應用程式共用使用者資料。
-
供應商重新導向回應用程式的重新導向 URI
-
應用程式會將提供者字符傳送至您的身分集區,並擷取臨時 AWS 憑證
-
應用程式會在 Web 介面中顯示結果面板。
身分驗證成功後,您會看到顯示結果面板的 Web 界面,而且您有兩個選項可以探索它們:
-
僅檢視登入資料按鈕:如果您想要直接查看在沒有 API 流程詳細資訊的情況下產生的臨時 AWS 登入資料,請選擇此按鈕。
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......",
"Expiration": "2025-08-12T13:36:17-07:00"
}
}
-
檢視詳細的 API 流程按鈕:如果您想要查看step-by-step請求,請選擇此按鈕。
-
應用程式會使用社交 IdP 登入使用者,並取得提供者字符。身分集區接受來自社交提供者的這些成品:
| 身分提供者 |
Cognito 提供者金鑰 |
用途 |
| Google |
accounts.google.com |
來自 Google Sign-In 的 OAuth 2.0 權杖 |
| Facebook |
graph.facebook.com |
從 Facebook Login 存取字符 |
| Amazon |
www.amazon.com |
來自 Login with Amazon 的 OAuth 權杖 |
與社交供應商成功進行身分驗證後,您的應用程式會收到 OAuth 回應,其中包含存取字符和其他身分驗證詳細資訊:
{
"access_token": "ya29.A0AS3H6NEXAMPLE......",
"expires_in": 3599,
"scope": "openid https://www.examplesocial....",
"token_type": "Bearer",
"id_token": "eyJhbGciOiJSUzI1NiIsEXAMPLE......"
}
-
GetId() 具有身分集區 ID 的 API 請求,以及包含社交供應商字符的Logins映射
POST GetId
{
"IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
"Logins": {
"accounts.google.com": "eyJhbGciOiJSUzI1NiIsEXAMPLE......"
}
}
回應:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222"
}
-
GetCredentialsForIdentity() 與傳回的 IdentityID和相同的Logins映射
POST GetCredentialsForIdentity
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Logins": {
"accounts.google.com": "eyJhbGciOiJSUzI1NiIsEXAMPLE......"
}
}
回應:
{
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......",
"Expiration": "2025-08-07T00:58:21-07:00"
},
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222"
}
發生的情況:Amazon Cognito 會根據設定的提供者驗證權杖、根據您的提供者組態選擇 IAM 角色,並 AWS STS 代表您呼叫 。然後,您的身分集區會傳回暫時登入資料。
- Social identity provider with basic flow
-
本節說明如何使用社交身分提供者登入使用者,並使用基本流程,在 Amazon Cognito 身分集區中交換提供者權杖,以使用臨時憑證來呼叫 AWS 服務。
使用社交登入搭配範例應用程式中的基本流程
-
在示範應用程式中,導覽至互動式示範區段
-
選擇已驗證存取索引標籤。
-
選擇基本流程索引標籤。
-
選擇您已設定的支援社交供應商,例如使用 Google 登入、使用 Facebook 登入或使用 Amazon 登入。
-
登入並同意與應用程式共用使用者資料。
-
供應商重新導向回應用程式的重新導向 URI
-
應用程式會將提供者字符傳送至您的身分集區,並擷取臨時 AWS 憑證
-
應用程式會在 Web 介面中顯示結果面板。
身分驗證成功後,您將看到顯示結果面板的 Web 界面,並且您有兩個選項可以探索它們:
-
僅檢視登入資料按鈕:如果您想要直接查看在沒有 API 流程詳細資訊的情況下產生的臨時 AWS 登入資料,請選擇此按鈕。
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......",
"Expiration": "2025-08-12T13:36:17-07:00"
}
}
-
檢視詳細的 API 流程按鈕:如果您想要查看step-by-step請求,請選擇此按鈕。
-
應用程式會使用社交 IdP 登入使用者,並取得提供者字符。身分集區接受來自社交提供者的這些成品:
| 身分提供者 |
Cognito 提供者金鑰 |
用途 |
| Google |
accounts.google.com |
來自 Google Sign-In 的 OAuth 2.0 權杖 |
| Facebook |
graph.facebook.com |
從 Facebook Login 存取字符 |
| Amazon |
www.amazon.com |
來自 Login with Amazon 的 OAuth 權杖 |
與社交供應商成功進行身分驗證後,您的應用程式會收到 OAuth 回應,其中包含存取字符和其他身分驗證詳細資訊:
{
"access_token": "ya29.A0AS3H6NEXAMPLE......",
"expires_in": 3599,
"scope": "openid https://www.examplesocial....",
"token_type": "Bearer",
"id_token": "eyJhbGciOiJSUzI1NiIsEXAMPLE......"
}
-
GetId() 具有身分集區 ID 的 API 請求,以及包含社交供應商字符的Logins映射
POST GetId
{
"IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
"Logins": {
"accounts.google.com": "token..."
}
}
回應:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222"
}
-
GetOpenIdToken() 與傳回的 IdentityID和相同的登入對應
POST GetOpenIdToken
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Logins": {
"accounts.google.com": "token..."
}
}
回應:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Token": "eyJraWQiOiJFWAMPLE......"
}
-
AssumeRoleWithWebIdentity() 使用 OpenID 字符
POST AssumeRoleWithWebIdentity
{
"RoleArn": "arn:aws:iam::111122223333:role/Cognito_IdentityPoolAuth_Role",
"WebIdentityToken": "eyJraWQiOiJFWAMPLE......"
}
回應:
{
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......",
"Expiration": "2025-08-12T14:36:17-07:00"
}
}
發生的情況:Amazon Cognito 會根據設定的提供者驗證權杖,並發出 OpenID 權杖。應用程式 AWS STS 直接呼叫 以擔任 IAM 角色並接收臨時登入資料。
了解社交存取
-
社交使用者在向社交提供者驗證之後,會透過 Amazon Cognito 身分集區接收臨時 AWS 登入資料。
-
每個已驗證的使用者都會取得保留在工作階段間的唯一身分 ID。
-
這些登入資料會連結至專為已驗證存取設計的 IAM 角色,提供比訪客存取更廣泛的許可。
-
社交提供者字符會交換為 AWS 登入資料,以維護使用者身分和許可。
此步驟會探索具有使用者集區受管登入整合的 Amazon Cognito 身分驗證。當您將使用者集區做為 IdP 連結至身分集區時,使用者集區權杖會授權您的身分集區發出臨時登入資料。
- User pool authentication with enhanced flow
-
增強型流程透過單一 API 請求,提供透過 Amazon Cognito 身分集區取得 AWS 憑證的簡化方法。
將 Amazon Cognito 使用者集區身分驗證與身分集區增強流程搭配使用
-
在示範應用程式中,導覽至互動式示範區段
-
選擇已驗證存取索引標籤。
-
選擇增強型流程索引標籤。
-
選擇使用 Amazon Cognito 使用者集區登入
-
在受管登入中使用您的使用者名稱和密碼完成登入。
-
使用者集區會使用授權碼重新導向回您的應用程式重新導向 URI。
-
應用程式會與您的使用者集區交換授權碼,以取得 JSON Web 字符。
-
應用程式會將 ID 字符與您的身分集區交換為臨時 AWS 登入資料
-
應用程式會在 Web 介面中顯示結果面板
身分驗證成功後,您會看到顯示結果面板的 Web 界面,而且您有兩個選項可以探索它們:
-
僅檢視登入資料按鈕:如果您想要直接查看在沒有 API 流程詳細資訊的情況下產生的臨時 AWS 登入資料,請選擇此按鈕。
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......",
"Expiration": "2025-08-12T13:36:17-07:00"
}
}
-
檢視詳細的 API 流程按鈕:如果您想要查看step-by-step請求,請選擇此按鈕。
-
應用程式使用 Amazon Cognito 登入使用者。使用使用者集區成功驗證後,您的應用程式會收到包含 ID 字符 (JWT) 的 OAuth 2.0 回應。身分集區會使用此提供者金鑰格式接受來自使用者集區的 JWT ID 字符:
| 身分提供者 |
Cognito 提供者金鑰 |
用途 |
| Amazon Cognito 使用者集區 |
cognito-idp.{region}.amazonaws.com/{user-pool-id} |
來自 Amazon Cognito 使用者集區的 JWT ID 字符 |
使用使用者集區成功驗證後,您的應用程式會收到包含 ID 字符 (JWT) 的 OAuth 2.0 回應:
{
"id_token": "eyJraWQiOiJFWAMPLE......",
"token_type": "Bearer",
"expires_in": 3600
}
-
GetId() 具有 identityPoolId和Logins映射的 API 請求,其中包含映射至 的使用者集區提供者金鑰id_token。Amazon Cognito 已驗證使用者集區 ID 權杖的簽章、發行者、到期和對象 (aud) 符合您在身分集區中為此使用者集區 IdP 註冊的其中一個應用程式用戶端 IDs。
POST GetId
{
"AccountId": "111122223333",
"IdentityPoolId": "us-east-1:1ac4a76d-1fef-48aa-83af-4224799c0b5c",
"Logins": {
"cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE123": "eyJraWQiOiJFWAMPLE......"
}
}
如果有效,它會尋找或建立並傳回使用者的 IdentityID。範例回應如下所示:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222"
}
-
GetCredentialsForIdentity() 與傳回的 identityPoolId和 a=與 相同的Logins映射id_token。Amazon Cognito 會重新驗證使用者集區 ID 權杖的簽章、發行者、到期和對象 (aud),與您為身分集區中此使用者集區 IdP 註冊的其中一個應用程式用戶端 IDs 相符。
POST GetCredentialsForIdentity
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Logins": {
"cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE123": "eyJraWQiOiJFWAMPLE......"
}
}
如果有效,它會選擇 IAM 角色 (roles-in-token、規則或預設值)、代表您呼叫 AWS STS ,並傳回臨時 AWS 登入資料。範例回應如下所示:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Credentials": {
"AccessKeyId": "ASIAW7TIP7EJEXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......",
"Expiration": "2025-08-12T14:36:17-07:00"
}
}
- User pool authentication with basic flow
-
基本流程提供對身分擷取和憑證產生之個別 API 請求的身分驗證程序的精細控制。
將 Amazon Cognito 使用者集區身分驗證與身分集區基本流程搭配使用
-
在示範應用程式中,導覽至互動式示範區段
-
選擇已驗證存取索引標籤。
-
選擇基本流程索引標籤。
-
選擇使用 Amazon Cognito 使用者集區登入
-
在受管登入中使用您的使用者名稱和密碼完成登入。
-
使用者集區會使用授權碼重新導向回您的應用程式重新導向 URI。
-
應用程式會與您的使用者集區交換授權碼,以取得 JSON Web 字符。
-
應用程式會將 ID 字符與您的身分集區交換為臨時 AWS 登入資料
-
應用程式會在 Web 介面中顯示結果面板
身分驗證成功後,您將看到顯示結果面板的 Web 界面,並且您有兩個選項可以探索它們:
-
僅檢視登入資料按鈕:如果您想要直接查看在沒有 API 流程詳細資訊的情況下產生的臨時 AWS 登入資料,請選擇此按鈕。
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......",
"Expiration": "2025-08-12T13:36:17-07:00"
}
}
-
檢視詳細的 API 流程按鈕:如果您想要查看step-by-step請求,請選擇此按鈕。
-
應用程式使用 Amazon Cognito 使用者集區登入使用者,並取得 ID 字符 (JWT) 做為成品。使用使用者集區成功驗證後,您的應用程式會收到包含 ID 字符 (JWT) 的 OAuth 回應。身分集區使用此字符進行身分驗證:
{
"id_token": "eyJraWQiOiJFWAMPLE......",
"token_type": "Bearer",
"expires_in": 3600
}
-
GetId() 具有身分集區 ID 和Logins映射的 API 請求,其中包含您的使用者集區提供者金鑰和 ID 字符作為值。Amazon Cognito 驗證使用者集區 ID 權杖的簽章、到期和對象 (aud) 符合您在身分集區中為此使用者集區 IdP 註冊的其中一個應用程式用戶端 IDs。
POST GetId
{
"AccountId": "111122223333",
"IdentityPoolId": "us-east-1:1ac4a76d-1fef-48aa-83af-4224799c0b5c",
"Logins": {
"cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE123": "eyJraWQiOiJFWAMPLE......"
}
}
如果有效,它會尋找或建立並傳回使用者的 IdentityID。範例回應如下所示:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222"
}
-
GetOpenIdToken() 與傳回的 IdentityID和相同的Logins映射
POST GetOpenIdToken
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Logins": {
"cognito-idp.us-east-1.amazonaws.com/us-east-1_EXAMPLE123": "eyJraWQiOiJFWAMPLE......"
}
}
回應:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Token": "eyJraWQiOiJFWAMPLE......"
}
此步驟中發生的情況:Amazon Cognito 會從 cognito-identity.amazonaws.com 發出代表此 的短期 OpenID Connect Web 身分字符IdentityId。權杖包含 AWS STS 評估的 OIDC 宣告,包括 aud (您的身分集區 ID) 和 amr (已驗證或未驗證)。IAM 角色的信任政策必須要求這些宣告。
-
AssumeRoleWithWebIdentity() - 您的應用程式 AWS STS 會直接呼叫 ,以交換 Amazon Cognito OpenID 字符做為臨時 AWS 登入資料
POST sts:AssumeRoleWithWebIdentity
{
"RoleArn": "arn:aws:iam::111122223333:role/Cognito_IdentityPoolAuth_Role",
"WebIdentityToken": "eyJraWQiOiJFWAMPLE......",
"RoleSessionName": "CognitoIdentityCredentials"
}
回應:
{
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "FwoGZXIvYXdzEEXAMPLE......",
"Expiration": "2025-08-12T14:36:17-07:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "AROAW7TIP7EJYEXAMPLE:CognitoIdentityCredentials",
"Arn": "arn:aws:sts::111122223333:assumed-role/Cognito_IdentityPoolAuth_Role/CognitoIdentityCredentials"
}
}
您的示範應用程式執行的動作:您的應用程式將 OpenID 權杖從 GetOpenIdToken()傳送到 AWS STS,請求臨時登入資料。 AWS STS 已執行驗證檢查和發行的登入資料:
-
使用者集區使用者透過 Amazon Cognito 身分集區接收臨時 AWS 憑證。
-
這些登入資料會連結到身分集區組態中指定的 IAM 角色。
-
使用者集區 ID 字符會透過身分集區交換 AWS 登入資料。
此步驟會探索 SAML 身分驗證。使用者可以使用支援 SAML 存取 AWS 服務的企業身分提供者登入。範例應用程式不支援使用 SAML 的基本流程。
- SAML authentication with enhanced flow
-
本節說明如何使用 SAML 身分提供者登入使用者,並使用增強型流程,將 Amazon Cognito 身分集區中的 SAML 聲明交換為臨時 AWS 憑證以呼叫 AWS 服務。
搭配身分集區增強流程使用 SAML 身分驗證
-
在示範應用程式中,導覽至互動式示範區段
-
選擇已驗證存取索引標籤。
-
選擇增強型流程索引標籤。
-
選擇使用 SAML 供應商登入
-
使用您的企業登入資料完成登入。
-
使用者集區會使用 SAML 聲明重新導向回您的應用程式重新導向 URI。
-
應用程式會與您的使用者集區交換授權碼,以取得 JSON Web 字符。
-
應用程式會將 SAML 回應與您的身分集區交換為臨時 AWS 登入資料
-
應用程式會在 Web 介面中顯示結果面板
身分驗證成功後,您會看到顯示結果面板的 Web 界面,而且您有兩個選項可以探索它們:
-
僅檢視登入資料按鈕:如果您想要直接查看在沒有 API 流程詳細資訊的情況下產生的臨時 AWS 登入資料,請選擇此按鈕。
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......",
"Expiration": "2025-08-12T13:36:17-07:00"
}
}
-
檢視詳細的 API 流程按鈕:如果您想要查看step-by-step請求,請選擇此按鈕。
-
應用程式會使用 SAML IdP 登入使用者,並取得 SAML 回應。身分集區使用 SAML 提供者 ARN 做為金鑰,接受來自企業提供者的 SAML 聲明:
| 身分提供者 |
Cognito 提供者金鑰 |
用途 |
| SAML 供應商 |
arn:aws:iam::111122223333:saml-provider/EXAMPLE |
來自企業 IdPs SAML 聲明 |
與 SAML 供應商成功進行身分驗證後,您的應用程式會透過 HTTP POST 接收 SAML 回應到您的回呼 URL:
{
"saml_response": "PD94bWwgdmVyc2lvbj0iMS4wIiBFWAMPLE...",
"provider_arn": "arn:aws:iam::111122223333:saml-provider/EXAMPLE",
"status": "Authentication successful"
}
-
GetId() 具有身分集區 ID 的 API 請求,以及包含 SAML 供應商 ARN 和聲明的Logins映射
POST GetId
{
"AccountId": "111122223333",
"IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
"Logins": {
"arn:aws:iam::111122223333:saml-provider/EXAMPLE": "PD94bWwgdmVyc2lvbj0iMS4wIiBFWAMPLE..."
}
}
回應:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222"
}
-
GetCredentialsForIdentity() 與傳回的 IdentityID和相同的Logins映射
POST GetCredentialsForIdentity
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Logins": {
"arn:aws:iam::111122223333:saml-provider/EXAMPLE": "PD94bWwgdmVyc2lvbj0iMS4wIiBFWAMPLE..."
}
}
回應:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......"
}
}
發生的情況:Amazon Cognito 會根據設定的提供者驗證 SAML 聲明、根據 SAML 屬性或規則選擇 IAM 角色,以及 AWS STS 代表您呼叫 。
了解 SAML 存取
-
在向 SAML 供應商驗證之後,企業使用者會收到來自 Amazon Cognito 身分集區的臨時 AWS 憑證。
-
每個已驗證的使用者都會取得保留在工作階段間的唯一身分 ID。
-
這些登入資料會連結至專為已驗證存取設計的 IAM 角色,提供比訪客存取更廣泛的許可。
-
SAML 聲明會交換為 AWS 登入資料,以維護使用者身分和企業屬性。
此步驟會探索企業身分提供者的 OIDC 身分驗證。使用者可以透過組織的企業身分提供者 (例如 Azure AD、Okta 或 Google Workspace) 登入以存取 AWS 服務。如果您要尋找將標準型身分驗證與 AWS 資源整合的相關資訊,請繼續閱讀。實作 OIDC 身分驗證之後,您將了解如何利用 OIDC 宣告進行精細存取控制。
- OIDC authentication with enhanced flow
-
本節說明如何使用 OIDC 身分提供者來登入使用者,並使用增強型流程,在 Amazon Cognito 身分集區中交換 OIDC 權杖,以取得臨時 AWS 憑證以呼叫 AWS 服務。
搭配身分集區增強流程使用 OIDC 登入
-
在示範應用程式中,導覽至互動式示範區段
-
選擇已驗證存取索引標籤。
-
選擇增強型流程索引標籤。
-
選擇使用 OIDC 供應商登入
-
使用您的企業登入資料完成登入。
-
OIDC 提供者會使用授權碼重新導向回應用程式
-
應用程式會與您的使用者集區交換授權碼,以取得 JSON Web 字符。
-
應用程式會將 OIDC 權杖傳送至您的身分集區,並擷取臨時 AWS 登入資料。
-
應用程式會在 Web 介面中顯示結果面板
身分驗證成功後,您會看到顯示結果面板的 Web 界面,而且您有兩個選項可以探索它們:
-
僅檢視登入資料按鈕:如果您想要直接查看在沒有 API 流程詳細資訊的情況下產生的臨時 AWS 登入資料,請選擇此按鈕。
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......",
"Expiration": "2025-08-12T13:36:17-07:00"
}
}
-
檢視詳細的 API 流程按鈕:如果您想要查看step-by-step請求,請選擇此按鈕。
-
應用程式使用 OIDC IdP 登入使用者,並取得 ID 字符。身分集區接受來自企業供應商的 OIDC 權杖:
| 身分提供者 |
Cognito 提供者金鑰 |
用途 |
| OIDC 供應商 |
example-provider.com/oauth2/default |
來自企業 IdPs OIDC ID 字符 |
與 OIDC 供應商成功進行身分驗證後,您的應用程式會收到包含字符的 OAuth 2.0 回應:
{
"token_type": "Bearer",
"expires_in": 3600,
"access_token": "eyJraWQiOiJFWAMPLE......",
"scope": "email openid profile",
"id_token": "eyJraWQiOiJFWAMPLE......"
}
-
GetId() 具有身分集區 ID 的 API 請求,以及包含 OIDC 提供者字符的Logins映射
POST GetId
{
"AccountId": "111122223333",
"IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
"Logins": {
"example-provider.com/oauth2/default": "eyJraWQiOiJFWAMPLE......"
}
}
回應:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222"
}
-
GetCredentialsForIdentity() 與傳回的 IdentityID和相同的登入對應
POST GetCredentialsForIdentity
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Logins": {
"example-provider.com/oauth2/default": "eyJraWQiOiJFWAMPLE......"
}
}
回應:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......"
}
}
發生的情況:Amazon Cognito 會根據設定的提供者驗證 OIDC 權杖、選擇 IAM 角色 (預設、宣告型或規則映射),並 AWS STS 代表您呼叫 。
- OIDC authentication with basic flow
-
本節說明如何使用 OIDC 身分提供者來登入使用者,並使用基本流程,在 Amazon Cognito 身分集區中交換 OIDC 權杖以呼叫 AWS AWS 服務。
將 OIDC 登入與身分集區基本流程搭配使用
-
在示範應用程式中,導覽至互動式示範區段
-
選擇已驗證存取索引標籤。
-
選擇基本流程索引標籤。
-
選擇使用 OIDC 供應商登入
-
使用您的企業登入資料完成登入。
-
OIDC 提供者會使用授權碼重新導向回應用程式
-
應用程式會與您的使用者集區交換授權碼,以取得 JSON Web 字符。
-
應用程式會將 OIDC 權杖傳送至您的身分集區,並擷取臨時 AWS 登入資料。
-
應用程式會在 Web 介面中顯示結果面板
身分驗證成功後,您會看到顯示結果面板的 Web 界面,而且您有兩個選項可以探索它們:
-
僅檢視登入資料按鈕:如果您想要直接查看在沒有 API 流程詳細資訊的情況下產生的臨時 AWS 登入資料,請選擇此按鈕。
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "IQoJb3JpZ2luX2VjEEXAMPLE......",
"Expiration": "2025-08-12T13:36:17-07:00"
}
}
-
檢視詳細的 API 流程按鈕:如果您想要查看step-by-step請求,請選擇此按鈕。
-
應用程式使用 OIDC IdP 登入使用者,並取得 ID 字符。身分集區接受來自企業供應商的 OIDC 權杖:
| 身分提供者 |
Cognito 提供者金鑰 |
用途 |
| OIDC 供應商 |
example-provider.com/oauth2/default |
來自企業 IdPs OIDC ID 字符 |
與 OIDC 供應商成功進行身分驗證後,您的應用程式會收到包含字符的 OAuth 2.0 回應:
{
"token_type": "Bearer",
"expires_in": 3600,
"access_token": "eyJraWQiOiJFWAMPLE......",
"scope": "openid email profile",
"id_token": "eyJraWQiOiJFWAMPLE......"
}
-
GetId() 具有身分集區 ID 的 API 請求,以及包含 OIDC 提供者字符的Logins映射
POST GetId
{
"IdentityPoolId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE11111",
"Logins": {
"example-provider.com/oauth2/default": "eyJraWQiOiJFWAMPLE......"
}
}
回應:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222"
}
-
GetOpenIdToken() 傳回的 IdentityID 和相同的Logins映射
POST GetOpenIdToken
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Logins": {
"example-provider.com/oauth2/default": "eyJraWQiOiJFWAMPLE......"
}
}
回應:
{
"IdentityId": "us-east-1:a1b2c3d4-5678-90ab-cdef-EXAMPLE22222",
"Token": "eyJraWQiOiJFWAMPLE......"
}
-
AssumeRoleWithWebIdentity() 使用 OpenID 字符
POST AssumeRoleWithWebIdentity
{
"RoleArn": "arn:aws:iam::111122223333:role/Cognito_IdentityPoolAuth_Role",
"WebIdentityToken": "eyJraWQiOiJFWAMPLE......"
}
回應:
{
"Credentials": {
"AccessKeyId": "AKIAIOSFODNN7EXAMPLE",
"SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
"SessionToken": "FwoGZXIvYXdzEEXAMPLE......",
"Expiration": "2025-08-12T14:36:17-07:00"
}
}
發生的情況:Amazon Cognito 會根據設定的提供者驗證 OIDC 權杖,並傳回 OpenID 權杖。應用程式 AWS STS 直接呼叫 以擔任適當的 IAM 角色,並收到短期登入資料。
了解 OIDC 身分驗證
後續步驟
現在您已設定並探索示範應用程式,您可以: