本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
產生權杖前 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
、updated_at
、 email_verified
和 除外address
。
根據預設,使用者集區會提供V1_0
事件。若要設定使用者集區以傳送V2_0
事件,請在 Amazon Cognito 主控台中設定觸發條件時,選擇基本功能的觸發事件版本 + 存取權杖自訂。您也可以在 UpdateUserPool 或 CreateUserPool API請求的LambdaConfig參數LambdaVersion
中設定 的值。使用 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:
根據預設,IAM角色會宣告 cognito:roles
和 cognito:preferred_role
並連結至使用者集區群組。若要隱藏這些宣告,請在 claimsToSuppress
物件cognito:groups
中隱藏 。
您可以新增 aud
宣告以存取權杖,但其值必須與目前工作階段的應用程式用戶端 ID 相符。您可以從 event.callerContext.clientId
的請求事件中中衍生出用戶端 ID。
自訂身分權杖
透過產生權杖前 Lambda 觸發程序,您可以自訂使用者集區中身分 (ID) 權杖的內容。ID 權杖提供來自受信任身分來源的使用者屬性,以便登入 Web 或行動應用程式。如需 ID 權杖的詳細資訊,請參閱 了解身分 (ID) 字符。
產生權杖前 Lambda 觸發程序搭配 ID 權杖的使用方式如下。
-
在執行階段變更使用者從身分集區請求IAM的角色。
-
從外部來源新增使用者屬性。
-
新增或取代現有的使用者屬性值。
-
禁止披露使用者屬性,因為使用者的授權範圍以及您授予應用程式用戶端的屬性的讀取存取權限,這些屬性可能會傳遞給您的應用程式。
自訂存取權杖
透過產生權杖前 Lambda 觸發程序,您可以自訂使用者集區中存取權杖的內容。存取權杖會授權使用者從受存取權保護的資源擷取資訊,例如 Amazon Cognito 權杖授權API的操作和第三方 APIs。雖然您可以使用 Amazon Cognito 透過用戶端憑證授予來 machine-to-machine產生 (M2M) 授權的存取權杖,但 M2M 請求不會叫用權杖前產生觸發功能,也無法發出自訂存取權杖。如需存取權杖的詳細資訊,請參閱 了解存取權杖。
產生權杖前 Lambda 觸發程序搭配存取權杖的使用方式包括下列項目。
-
在
scope
宣告中新增或隱藏 OAuth 2.0 範圍。例如,您可以將範圍新增至由 Amazon Cognito 使用者集區API身分驗證產生的存取字符,該身分驗證只會指派範圍aws.cognito.signin.user.admin
。 -
變更使用者集區群組中的使用者成員資格。
-
新增尚未存在於 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 |
您可以為使用者集區群組設定優先順序。此元素包含來自 群組IAM的角色名稱,該群組在 |
1 |
clientMetadata |
針對權杖產生前觸發程序,您可以做為 Lambda 函數的自訂輸入來指定與提供的一個或多個鍵值組。 若要將此資料傳遞至 Lambda 函數,請在 AdminRespondToAuthChallenge和 ClientMetadataRespondToAuthChallengeAPI操作中使用 參數。Amazon Cognito 不會在傳遞至權杖產生前函數的請求中包含來自 AdminInitiateAuth和 InitiateAuthAPI操作的 |
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 觸發程序相關聯的資料來設定測試事件。下列是此程式碼範例的測試事件:
權杖前產生事件第 2 版範例:使用複雜的物件新增宣告
此範例會對使用者的權杖進行下列修改。
-
將數字、字串、布林值和JSON類型的宣告新增至 ID 權杖。這是第 2 版觸發事件提供給 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 觸發程序相關聯的資料來設定測試事件。下列是此程式碼範例的測試事件: