身分驗證前 Lambda 觸發程序 - Amazon Cognito

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

身分驗證前 Lambda 觸發程序

Amazon Cognito 會在使用者嘗試登入時叫用此觸發程序,因此您可以建立自訂驗證來執行預先準備的動作。例如,您可以拒絕身分驗證請求,或將工作階段資料記錄到外部系統。

注意

當使用者不存在,或者您的使用者集區中已有工作階段時,不會啟用 Lambda 觸發程式。如果使用者集區應用程式用戶端的 PreventUserExistenceErrors 設定設為 ENABLED,則 Lambda 觸發程式將會啟用。

身分驗證流程概觀

註冊前身分驗證 Lambda 觸發程序 – 用戶端流程

請求包含來自應用程式傳遞給使用者集區InitiateAuthAdminInitiateAuthAPI操作之ClientMetadata值的用戶端驗證資料。

如需詳細資訊,請參閱使用者集區身分驗證流程

身分驗證前 Lambda 觸發程序參數

Amazon Cognito 傳遞至此 Lambda 函數的請求,是以下參數和 Amazon Cognito 新增至所有請求的常用參數之組合。

JSON
{ "request": { "userAttributes": { "string": "string", . . . }, "validationData": { "string": "string", . . . }, "userNotFound": boolean }, "response": {} }

身分驗證前請求參數

userAttributes

代表使用者屬性的一或多組名稱/值。

userNotFound

當您將使用者集區的 PreventUserExistenceErrors 設定為 ENABLED 時,Amazon Cognito 會填入此布林值。

validationData

一或多個鍵值組,包含使用者登入請求中的驗證資料。若要將此資料傳遞至 Lambda 函數,請在 InitiateAuthAdminInitiateAuthAPI動作中使用 ClientMetadata 參數。

身分驗證前回應參數

Amazon Cognito 不預期會在回應中收到任何其他傳回的資訊。您的函數可能會傳回錯誤,以拒絕登入嘗試,或使用 API 操作來查詢和修改資源。

身分驗證前範例

此範例函數可防止使用者使用特定的應用程式用戶端登入您的使用者集區。由於預先驗證 Lambda 函數在使用者具有現有工作階段時不會叫用,因此該函數只會防止您要封鎖的應用程式用戶端 ID 展開新的工作階段。

Node.js
const handler = async (event) => { if ( event.callerContext.clientId === "user-pool-app-client-id-to-be-blocked" ) { throw new Error("Cannot authenticate users from this user pool app client"); } return event; }; export { handler };
Python
def lambda_handler(event, context): if event['callerContext']['clientId'] == "<user pool app client id to be blocked>": raise Exception("Cannot authenticate users from this user pool app client") # Return to Amazon Cognito return event

Amazon Cognito 會將事件資訊傳遞至您的 Lambda 函數。此函數會將相同事件物件傳回 Amazon Cognito,並在回應中附上任何變更。在 Lambda 主控台中,您可使用與 Lambda 觸發程序相關聯的資料來設定測試事件。下列是此程式碼範例的測試事件:

JSON
{ "callerContext": { "clientId": "<user pool app client id to be blocked>" }, "response": {} }