本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
產生權杖前 Lambda 觸發程序
由於 Amazon Cognito 會在產生權杖之前叫用此觸發程序,因此您可以自訂使用者集區的權杖宣告。透過第一版或 V1_0
預先產生權杖觸發事件的基本功能,您可以自訂身份 (ID) 權杖。在具有高級安全功能活動的使用者集區中,您可以通過存取權杖自訂生成版本 2 或 V2_0
觸發事件。
Amazon Cognito 會將 V1_0
事件作為請求傳送至您的函數,其中包含會寫入 ID 權杖的資料。V2_0
事件是單一請求,其中包含 Amazon Cognito 將寫入身分和存取權杖的資料。若要自訂兩個權杖,您必須更新您的函數以使用最新的觸發程序版本,並在相同的回應中傳送兩個權杖的資料。
在 Amazon Cognito 將權杖發佈到您的應用程式之前,此 Lambda 觸發程序可以新增、移除和修改身分與存取權杖中的某些宣告。若要使用此功能,請從 Amazon Cognito 使用者集區主控台來連結一個 Lambda 函數,或是透過 AWS Command Line Interface
(AWS CLI) 來更新您的使用者集區 LambdaConfig
。
活動版本
您的使用者集區可以向 Lambda 函數傳遞不同版本的權杖產生觸發器事件。V1_0
觸發器提供用於修改 ID 令牌的參數。V2_0
觸發器提供以下參數。
-
V1_0
觸發器的功能。 -
自定義訪問令牌的能力。
-
將複雜數據類型傳遞給 ID 和訪問令牌聲明值的能力:
-
字串
-
Number
-
Boolean
-
字符串,數字,布爾值或任何這些組合的數組
-
JSON
-
注意
在 ID 令牌中,您可以將複雜對象填充為聲明的值 phone_number_verified
email_verified
,除了updated_at
,和address
。
依預設,使用者集區會傳送V1_0
事件。若要設定使用者集區以傳送V2_0
事件,請在 Amazon Cognito 主控台中設定觸發器時,選擇基本功能 + 存取權杖自訂的觸發事件版本。您也可以在UpdateUserPool 或 CreateUserPool API 請求LambdaVersion
的LambdaConfig參數中設定的值。使用V2_0
事件自訂存取權杖需支付額外費用。如需詳細資訊,請參閱 Amazon Cognito 定價
排除宣告和範圍
Amazon Cognito 限制您可以在存取權和身分權杖中新增、修改或隱藏的宣告和範圍。如果您的 Lambda 函數嘗試為這些宣告中的任何一個設定值,Amazon Cognito 會發出具有原始宣告值的權杖 (如果請求中存在該權杖的話)。
共用宣告
-
acr
-
amr
-
at_hash
-
auth_time
-
azp
-
exp
-
iat
-
iss
-
jti
-
nbf
-
nonce
-
origin_jti
-
sub
-
token_use
ID 令牌宣告
-
identities
-
aud
-
cognito:username
存取權杖宣告
-
username
-
client_id
-
scope
注意
您可以使用
scopesToAdd
和scopesToSuppress
回應值變更存取權杖中的範圍,但不能直接修改scope
宣告。您無法新增開頭為aws.cognito
的範圍,包括使用者集區保留的範圍aws.cognito.signin.user.admin
。 -
device_key
-
event_id
-
version
您無法使用以下字首新增或覆寫宣告,但可以隱藏它們,或阻止其出現在權杖中。
-
dev:
-
cognito:
您可以新增 aud
宣告以存取權杖,但其值必須與目前工作階段的應用程式用戶端 ID 相符。您可以從 event.callerContext.clientId
的請求事件中中衍生出用戶端 ID。
自訂身分權杖
透過產生權杖前 Lambda 觸發程序,您可以自訂使用者集區中身分 (ID) 權杖的內容。ID 權杖提供來自受信任身分來源的使用者屬性,以便登入 Web 或行動應用程式。如需 ID 權杖的詳細資訊,請參閱 使用 ID 權杖。
產生權杖前 Lambda 觸發程序搭配 ID 權杖的使用方式如下。
-
在執行階段變更您的使用者從身分集區請求的 IAM 角色。
-
從外部來源新增使用者屬性。
-
新增或取代現有的使用者屬性值。
-
禁止披露使用者屬性,因為使用者的授權範圍以及您授予應用程式用戶端的屬性的讀取存取權限,這些屬性可能會傳遞給您的應用程式。
自訂存取權杖
透過產生權杖前 Lambda 觸發程序,您可以自訂使用者集區中存取權杖的內容。存取權杖授權使用者從受存取保護的資源 (例如 Amazon Cognito 權杖授權的 API 操作和第三方 API) 擷取資訊。雖然您可以使用用戶端登入資料授與 Amazon Cognito 產生 machine-to-machine (M2M) 授權的存取權杖,但 M2M 請求不會叫用權杖產生前觸發器函數,也無法發出自訂存取權杖。如需存取權杖的詳細資訊,請參閱 使用存取權杖。
產生權杖前 Lambda 觸發程序搭配存取權杖的使用方式包括下列項目。
-
在
scope
宣告中新增或隱藏 OAuth 2.0 範圍。例如,您可以將範圍新增至僅指派範圍aws.cognito.signin.user.admin
的 Amazon Cognito 使用者集區 API 身份驗證所產生的存取權杖。 -
變更使用者集區群組中的使用者成員資格。
-
新增尚未存在於 Amazon Cognito 存取權杖中的宣告。
-
禁止披露宣告,否則宣告會傳遞給您的應用程式。
若要支援使用者集區中的存取自訂,您必須設定使用者集區以產生觸發請求的更新版本。更新您的使用者集區,如下列流程所示。
主題
產生權杖前 Lambda 觸發程序來源
triggerSource 值 | 事件 |
---|---|
TokenGeneration_HostedAuth |
在身分驗證期間,從 Amazon Cognito 託管的 UI 登入頁面呼叫。 |
TokenGeneration_Authentication |
在使用者身分驗證流程完成之後呼叫。 |
TokenGeneration_NewPasswordChallenge |
在管理員建立使用者之後呼叫。當使用者必須變更臨時密碼時,會叫用此流程。 |
TokenGeneration_AuthenticateDevice |
在使用者裝置的身分驗證結束時呼叫。 |
TokenGeneration_RefreshTokens |
當使用者嘗試重新整理身分和存取權杖時呼叫。 |
產生權杖前 Lambda 觸發程序參數
Amazon Cognito 傳遞至此 Lambda 函數的請求,是以下參數和 Amazon Cognito 新增至所有請求的常用參數之組合。當您將產生權杖前 Lambda 觸發程序新增至使用者集區時,您可以選擇觸發程序版本。此版本決定 Amazon Cognito 是否將請求傳遞至您的 Lambda 函數 以及用於存取權杖自訂的其他參數。
產生權杖前請求參數
名稱 | 描述 | 最小觸發事件版本 |
---|---|---|
userAttributes |
您的使用者在使用者集區中的設定檔屬性。 |
1 |
groupConfiguration |
包含目前群組組態的輸入物件。物件包含 |
1 |
groupsToOverride |
您的用戶所屬的使用者集區。 |
1 |
iamRolesTo覆寫 |
您可以將使用者集區群組與 AWS Identity and Access Management (IAM) 角色建立關聯。此元素是使用者所屬群組中所有 IAM 角色的清單。 |
1 |
preferredRole |
您可以為使用者集區群組設定優先順序。此元素包含 |
1 |
clientMetadata |
針對權杖產生前觸發程序,您可以做為 Lambda 函數 的自訂輸入來指定與 提供的一個或多個鍵值組。 若要將此資料傳遞至 Lambda 函數,請在AdminRespondToAuthChallenge和 RespondToAuthChallengeAPI 作業中使用 ClientMetadata參數。Amazon Cognito 不會在傳遞給預先權杖產生函 |
1 |
範圍 |
您的使用者的 OAuth 2.0 範圍。存取權杖中存在的範圍是使用者請求的使用者集區標準範圍和自訂範圍,以及您授權應用程式用戶端發佈的範圍。 |
2 |
產生權杖前回應參數
名稱 | 描述 | 最小觸發事件版本 |
---|---|---|
claimsOverrideDetails | V1_0 觸發事件中所有元素的容器。 |
1 |
claimsAndScopeOverrideDetails |
|
2 |
idTokenGeneration |
您要在使用者 ID 權杖中覆寫、新增或抑制的宣告。ID 權杖自訂值的父元素僅出現在版本 2 事件中,但子元素出現在版本 1 事件中。 |
2 |
accessTokenGeneration |
您想要在使用者的存取權杖中覆寫、新增或抑制的宣告和範圍。此存取權杖自訂值的父元素僅出現在版本 2 事件中。 |
2 |
claimsToAddOrOverride |
您要新增或修改的一或多個宣告及其值的映射。對於與群組相關的宣告,請改用 在版本 2 事件中,此元素顯示於 |
1* |
claimsToSuppress |
您希望 Amazon Cognito 抑制的宣告清單。如果您的函數抑制並取代了宣告值,則 Amazon Cognito 將抑制宣告。 在版本 2 事件中,此元素顯示於 |
1 |
groupOverrideDetails |
包含目前群組組態的輸出物件。物件包含 您的函數將使用您提供的物件取代 Amazon Cognito ID 權杖和存取權杖都包含 |
1 |
scopesToAdd |
您想要新增至使用者存取權杖中 |
2 |
scopesToSuppress |
您想要從使用者存取權杖的 |
2 |
* 版本 1 事件的回應物件可傳回字串。對版本 2 事件的響應對象可以返回複雜的對象。
觸發權杖前事件版本二範例:新增和抑制宣告,範圍和群組
此範例會對使用者的權杖進行下列修改。
-
在 ID 權杖中將其
family_name
設置為Doe
。 -
防止
email
和phone_number
宣告出現在 ID 權杖中。 -
將其 ID 權杖
cognito:roles
宣告設置為"arn:aws:iam::123456789012:role\/sns_callerA","arn:aws:iam::123456789012:role\/sns_callerC","arn:aws:iam::123456789012:role\/sns_callerB"
。 -
將其 ID 權杖
cognito:preferred_role
宣告設置為arn:aws:iam::123456789012:role/sns_caller
。 -
將範圍
openid
、email
和solar-system-data/asteroids.add
新增到存取權杖。 -
抑制存取權杖的範圍
phone_number
和aws.cognito.signin.user.admin
。移除phone_number
可防止從userInfo
中擷取使用者的電話號碼。移除aws.cognito.signin.user.admin
可防止使用者透過 Amazon Cognito 使用者集區 API 讀取和修改自身設定檔的 API 請求。注意
如存取權杖中的剩餘範圍包含
openid
與至少一個標準範圍,從範圍中刪除phone_number
僅會防止擷取用戶的電話號碼。如需詳細資訊,請參閱 關於範圍。 -
將其 ID 和存取權杖
cognito:groups
宣告設置為"new-group-A","new-group-B","new-group-C"
。
Amazon Cognito 會將事件資訊傳遞至您的 Lambda 函數。此函數會將相同事件物件傳回 Amazon Cognito,並在回應中附上任何變更。在 Lambda 主控台中,您可使用與 Lambda 觸發程序相關聯的資料來設定測試事件。下列是此程式碼範例的測試事件:
前令牌生成事件版本二示例:添加具有複雜對象的聲明
此範例會對使用者的權杖進行下列修改。
-
將數字,字符串,布爾和 JSON 類型的聲明添加到 ID 令牌。這是第二版觸發器事件對 ID 令牌可用的唯一更改。
-
將數字,字符串,布爾和 JSON 類型的聲明添加到訪問令牌。
-
將三個範圍添加到訪問令牌。
-
隱藏 ID
email
和存取權杖中的和sub
宣告。 -
隱藏存取權杖中的
aws.cognito.signin.user.admin
範圍。
Amazon Cognito 會將事件資訊傳遞至您的 Lambda 函數。此函數會將相同事件物件傳回 Amazon Cognito,並在回應中附上任何變更。在 Lambda 主控台中,您可使用與 Lambda 觸發程序相關聯的資料來設定測試事件。下列是此程式碼範例的測試事件:
產生權杖前事件版本一範例:新增宣告及抑制現有宣告
此範例使用版本 1 觸發事件和「產生權杖前 Lambda 函數」來新增宣告及抑制現有宣告。
Amazon Cognito 會將事件資訊傳遞至您的 Lambda 函數。此函數會將相同事件物件傳回 Amazon Cognito,並在回應中附上任何變更。在 Lambda 主控台中,您可使用與 Lambda 觸發程序相關聯的資料來設定測試事件。下列是此程式碼範例的測試事件:由於程式碼 範例 會處理任何請求參數,因此可以使用具有空白請求的測試事件。如需有關常見請求參數的詳細資訊,請參閱 使用者集區 Lambda 觸發程序事件。
產生權杖前事件版本一範例:修改使用者的群組成員資格
此範例使用版本 1 觸發事件和「產生權杖前 Lambda 函數」來修改使用者的群組成員資格。
Amazon Cognito 會將事件資訊傳遞至您的 Lambda 函數。此函數會將相同事件物件傳回 Amazon Cognito,並在回應中附上任何變更。在 Lambda 主控台中,您可使用與 Lambda 觸發程序相關聯的資料來設定測試事件。下列是此程式碼範例的測試事件: