Lambda-Auslöser für die Vorab-Generierung von Token - Amazon Cognito

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Lambda-Auslöser für die Vorab-Generierung von Token

Da Amazon Cognito diesen Auslöser aufruft, bevor Token generiert werden, können Sie die Ansprüche in Benutzerpool-Token anpassen. Mit den grundlegenden Features von Version 1 oder dem Auslöserereignis V1_0 vor der Token-Generierung können Sie das Identitätstoken (ID) anpassen. In Benutzerpools mit aktiven erweiterten Sicherheits-Features können Sie das Ereignis der Version 2 oder das V2_0-Auslöserereignis mit Anpassung des Zugriffstokens generieren.

Amazon Cognito sendet ein V1_0-Ereignis als Anfrage an Ihre Funktion mit Daten, die in das Identitätstoken geschrieben werden. Ein V2_0-Ereignis ist eine einzelne Anfrage mit den Daten, die Amazon Cognito sowohl in die Identitäts- als auch in die Zugriffstoken schreiben würde. Sie müssen Ihre Funktion so aktualisieren, dass sie die neueste Trigger-Version verwendet, und Daten für beide Token in derselben Antwort senden, wenn beide Token angepasst weden sollen.

Dieser Lambda-Auslöser kann einige Ansprüche in Identitäts- und Zugriffstoken hinzufügen, entfernen und ändern, bevor Amazon Cognito sie an Ihre App ausgibt. Um dieses Feature zu verwenden, verknüpfen Sie eine Lambda-Funktion aus der Amazon-Cognito-Benutzerpool-Konsole oder aktualisieren Ihren Benutzerpool LambdaConfig über die AWS Command Line Interface (AWS CLI).

Ereignisversionen

Ihr Benutzerpool kann verschiedene Versionen eines Trigger-Ereignisses vor der Token-Generierung an Ihre Lambda-Funktion liefern. Ein V1_0 Trigger liefert die Parameter für die Änderung von ID-Token. Ein V2_0 Trigger liefert Parameter für Folgendes.

  1. Die Funktionen eines V1_0 Triggers.

  2. Die Möglichkeit, Zugriffstoken anzupassen.

  3. Die Fähigkeit, komplexe Datentypen an ID- und Zugriffstoken-Anspruchswerte zu übergeben:

    • String

    • Zahl

    • Boolesch

    • Array aus Zeichenketten, Zahlen, Booleschen Werten oder einer Kombination aus diesen

    • JSON

Anmerkung

Im ID-Token können Sie komplexe Objekte mit den Werten von Ansprüchen mit Ausnahme vonphone_number_verified,email_verified, updated_at und auffüllen. address

Benutzerpools liefern standardmäßig V1_0 Ereignisse. Um Ihren Benutzerpool für das Senden eines V2_0 Ereignisses zu konfigurieren, wählen Sie eine Trigger-Event-Version von Basic features + access token customization, wenn Sie Ihren Trigger in der Amazon Cognito Cognito-Konsole konfigurieren. Sie können den Wert von auch LambdaVersion in den LambdaConfigParametern einer UpdateUserPool oder CreateUserPool API-Anfrage festlegen. Für die Anpassung des Zugriffstokens mit V2_0 Ereignissen fallen zusätzliche Kosten an. Weitere Informationen finden Sie unter Amazon Cognito – Preise.

Ausgeschlossene Ansprüche und Bereiche

Amazon Cognito schränkt die Ansprüche und Bereiche ein, die Sie in Zugriffs- und Identitäts-Token hinzufügen, ändern oder unterdrücken können. Wenn Ihre Lambda-Funktion versucht, einen Wert für einen dieser Ansprüche festzulegen, gibt Amazon Cognito ein Token mit dem ursprünglichen Anspruchswert aus, sofern einer in der Anfrage vorhanden war.

Freigegebene Ansprüche
  • acr

  • amr

  • at_hash

  • auth_time

  • azp

  • exp

  • iat

  • iss

  • jti

  • nbf

  • nonce

  • origin_jti

  • sub

  • token_use

ID-Token-Ansprüche
  • identities

  • aud

  • cognito:username

Zugriffs-Token-Ansprüche
  • username

  • client_id

  • scope

    Anmerkung

    Sie können die Bereiche in einem Zugriffs-Token mit den Antwortwerten scopesToAdd und scopesToSuppress ändern, den scope-Anspruch können Sie jedoch nicht direkt ändern. Sie können keine Bereiche hinzufügen, die mit aws.cognito beginnen, einschließlich des reservierten Bereichs aws.cognito.signin.user.admin für Benutzerpools.

  • device_key

  • event_id

  • version

Sie können keine Ansprüche mit den folgenden Präfixen hinzufügen oder überschreiben, Sie können sie jedoch unterdrücken oder verhindern, dass sie im Token erscheinen.

  • dev:

  • cognito:

Sie können einen aud-Anspruch zu Zugriffs-Token hinzufügen, jedoch muss dessen Wert mit der App-Client-ID der aktuellen Sitzung übereinstimmen. Sie können die Client-ID im Anforderungsereignis von event.callerContext.clientId ableiten.

Anpassen des Identitäts-Token

Mit dem Lambda-Trigger vor der Token-Generierung können Sie den Inhalt eines Identitäts-Tokens (ID-Token) aus Ihrem Benutzerpool heraus anpassen. Das ID-Token stellt Benutzerattribute aus einer vertrauenswürdigen Identitätsquelle für die Anmeldung bei einer Web- oder mobilen App bereit. Weitere Informationen zu ID-Token finden Sie unter Verwenden des ID-Tokens.

Der Lambda-Trigger vor der Token-Generierung mit einem ID-Token kann unter anderem wie folgt verwendet werden.

  • Eine Änderung an der IAM-Rolle zur Laufzeit vornehmen, die Ihr Benutzer aus einem Identitätspool anfordert.

  • Benutzerattribute aus einer externen Quelle hinzufügen.

  • Vorhandene Benutzerattributwerte hinzufügen oder ersetzen.

  • Die Offenlegung von Benutzerattributen unterdrücken, die aufgrund der autorisierten Bereiche Ihres Benutzers und des Lesezugriffs auf Attribute, die Sie Ihrem App-Client gewährt haben, andernfalls an Ihre App weitergegeben würden.

Anpassen des Zugriffs-Token

Mit dem Lambda-Trigger vor der Token-Generierung können Sie den Inhalt eines Zugriffs-Tokens aus Ihrem Benutzerpool heraus anpassen. Das Zugriffs-Token autorisiert Benutzer, Informationen aus zugriffsgeschützten Ressourcen abzurufen, z. B. aus Token-autorisierten Amazon-Cognito-API-Operationen sowie Drittanbieter-APIs. Sie können zwar Zugriffstoken für die machine-to-machine (M2M-) Autorisierung mit Amazon Cognito mit einer Gewährung von Kundenanmeldedaten generieren, M2M-Anfragen rufen jedoch nicht die Triggerfunktion vor der Token-Generierung auf und können keine benutzerdefinierten Zugriffstoken ausgeben. Weitere Informationen zu Zugriffs-Token finden Sie unter Verwenden des Zugriffstokens.

Der Lambda-Trigger vor der Token-Generierung mit einem Zugriffs-Token kann unter anderem wie folgt verwendet werden.

  • Fügen Sie dem scope-Anspruch OAuth 2.0-Bereiche hinzu oder unterdrücken Sie diese. Sie können beispielsweise Bereiche zu einem Zugriffs-Token hinzufügen, das aus der API-Authentifizierung von Amazon-Cognito-Benutzerpools resultiert, wodurch nur der Bereich aws.cognito.signin.user.admin zugewiesen wird.

  • Die Mitgliedschaft eines Benutzers in Benutzerpool-Gruppen ändern.

  • Fügen Sie Ansprüche hinzu, die noch nicht in einem Amazon-Cognito-Zugriffstoken enthalten sind.

  • Unterdrücken Sie die Offenlegung von Ansprüchen, die andernfalls an Ihre App weitergeleitet würden.

Sie müssen den Benutzerpool so konfigurieren, dass eine aktualisierte Version der Trigger-Anforderung generiert wird um Zugriffsanpassungen in Ihrem Benutzerpool zu unterstützen. Aktualisieren Sie Ihren Benutzerpool wie im folgenden Verfahren gezeigt.

AWS Management Console
So unterstützen Sie die Anpassung von Zugriffs-Token in einem Lambda-Trigger vor der Token-Generierung
  1. Navigieren Sie zur Amazon-Cognito-Konsole und wählen Sie User Pools (Benutzerpools) aus.

  2. Wählen Sie einen vorhandenen Benutzerpool aus der Liste aus oder erstellen Sie einen neuen Benutzerpool.

  3. Falls Sie dies noch nicht getan haben, aktivieren Sie erweiterte Sicherheits-Features auf der Registerkarte App-Integration.

  4. Wählen Sie die Registerkarte User pool properties (Benutzerpool-Eigenschaften) und suchen Sie dort nach Lambda-Auslösern.

  5. Fügen Sie einen Trigger für die Pre-Token-Generierung hinzu oder bearbeiten Sie ihn.

  6. Wählen Sie unter Zuweisen einer Lambda-Funktion eine Lambda-Funktion aus.

  7. Wählen Sie eine Auslöserereignis-Version unter Grundlegende Features und Anpassung des Zugriffstokens aus. Diese Einstellung aktualisiert die Anforderungsparameter, die Amazon Cognito an Ihre Funktion sendet, damit sie Felder für die Anpassung von Zugriffs-Token enthalten.

User pools API

So unterstützen Sie die Anpassung von Zugriffs-Token in einem Lambda-Trigger für die Pre-Token-Generierung

Generieren Sie eine oder API-Anfrage CreateUserPool. UpdateUserPool Sie müssen einen Wert für alle Parameter angeben, die nicht auf einen Standardwert festgelegt werden sollen. Weitere Informationen finden Sie unter Aktualisieren der Benutzerpool-Konfiguration.

Nehmen Sie den folgenden Inhalt in den LambdaVersion-Parameter Ihrer Anfrage auf. Ein LambdaVersion Wert von V2_0 veranlasst Ihren Benutzerpool, Parameter für die Anpassung von Zugriffs-Token hinzuzufügen. Verwenden Sie einen Lambda-Funktions-ARN mit einer Funktionsversion als den Wert von LambdaArn, um eine bestimmte Funktionsversion aufzurufen.

"PreTokenGenerationConfig": { "LambdaArn": "arn:aws:lambda:us-west-2:123456789012:function:MyFunction", "LambdaVersion": "V2_0" },

Lambda-Auslöserquellen für die Vorab-Generierung von Token

triggerSource-Wert Ereignis
TokenGeneration_HostedAuth Wird bei der Authentifizierung durch die Anmeldeseite der gehosteten Amazon-Cognito-Benutzeroberfläche aufgerufen.
TokenGeneration_Authentication Wird aufgerufen, nachdem Benutzer-Authentifizierung-Abläufe abgeschlossen sind.
TokenGeneration_NewPasswordChallenge Wird aufgerufen, nachdem der Benutzer von einem Administrator erstellt wurde. Dieser Ablauf wird aufgerufen, wenn der Benutzer ein temporäres Passwort ändern muss.
TokenGeneration_AuthenticateDevice Wird am Ende der Authentifizierung eines Benutzergeräts aufgerufen.
TokenGeneration_RefreshTokens Wird aufgerufen, wenn ein Benutzer versucht, die Identitäts- und Zugriffs-Token zu aktualisieren.

Lambda-Auslöserparameter für die Vorab-Generierung von Token

Die Anforderung, die Amazon Cognito an diese Lambda-Funktion übergibt, ist eine Kombination der folgenden Parameter und der allgemeinen Parameter, die Amazon Cognito allen Anfragen hinzufügt. Wenn Sie Ihrem Benutzerpool zur Pre-Token-Generierung einen Lambda-Trigger hinzufügen, können Sie eine Trigger-Version auswählen. Diese Version bestimmt, ob Amazon Cognito eine Anfrage mit zusätzlichen Parametern für die Anpassung von Zugriffs-Token an Ihre Lambda-Funktion weitergibt.

Version 1

Mit dem Versions-1-Token können Gruppenmitgliedschaften, IAM-Rollen und neue Ansprüche in ID-Token festgelegt werden.

{ "request": { "userAttributes": {"string": "string"}, "groupConfiguration": { "groupsToOverride": [ "string", "string" ], "iamRolesToOverride": [ "string", "string" ], "preferredRole": "string" }, "clientMetadata": {"string": "string"} }, "response": { "claimsOverrideDetails": { "claimsToAddOrOverride": {"string": "string"}, "claimsToSuppress": [ "string", "string" ], "groupOverrideDetails": { "groupsToOverride": [ "string", "string" ], "iamRolesToOverride": [ "string", "string" ], "preferredRole": "string" } } } }
Version 2

Das Version-2-Anforderungsereignis fügt Felder hinzu, mit denen das Zugriffstoken angepasst werden kann. Es fügt auch Unterstützung für komplexe claimsToOverride Datentypen im Antwortobjekt hinzu. Ihre Lambda-Funktion kann die folgenden Datentypen im Wert von claimsToOverride zurückgeben:

  • String

  • Zahl

  • Boolesch

  • Array aus Zeichenketten, Zahlen, Booleschen Werten oder einer Kombination aus diesen

  • JSON

{ "request": { "userAttributes": { "string": "string" }, "scopes": ["string", "string"], "groupConfiguration": { "groupsToOverride": ["string", "string"], "iamRolesToOverride": ["string", "string"], "preferredRole": "string" }, "clientMetadata": { "string": "string" } }, "response": { "claimsAndScopeOverrideDetails": { "idTokenGeneration": { "claimsToAddOrOverride": { "string": [accepted datatype] }, "claimsToSuppress": ["string", "string"] }, "accessTokenGeneration": { "claimsToAddOrOverride": { "string": [accepted datatype] }, "claimsToSuppress": ["string", "string"], "scopesToAdd": ["string", "string"], "scopesToSuppress": ["string", "string"] }, "groupOverrideDetails": { "groupsToOverride": ["string", "string"], "iamRolesToOverride": ["string", "string"], "preferredRole": "string" } } } }

Anforderungsparameter für die Vorab-Generierung von Token

Name Beschreibung Minimale Trigger-Ereignisversion
userAttributes

Die Attribute Ihres Benutzerprofils in Ihrem Benutzerpool.

1
groupConfiguration

Das Eingabeobjekt, das die aktuelle Gruppenkonfiguration enthält. Das Objekt umfasst groupsToOverride, iamRolesToOverride und preferredRole.

1
groupsToOverride

Die Benutzerpoolgruppen, in denen Ihr Benutzer Mitglied ist.

1
iamRolesToÜberschreiben

Sie können eine Benutzerpoolgruppe einer AWS Identity and Access Management (IAM-) Rolle zuordnen. Dieses Element ist eine Liste aller IAM-Rollen aus den Gruppen, in denen Ihr Benutzer Mitglied ist.

1
preferredRole

Sie können eine Priorität für Benutzerpoolgruppen festlegen. Dieses Element enthält den Namen der IAM-Rolle aus der Gruppe mit der höchsten Priorität im groupsToOverride-Element.

1
clientMetadata

Ein oder mehrere Schlüssel-Wert-Paare, die Sie als benutzerdefinierte Eingabe für die Lambda-Funktion angeben und für den Auslöser für die Pre-Token-Generierung bereitstellen können.

Um diese Daten an Ihre Lambda-Funktion zu übergeben, verwenden Sie den ClientMetadata Parameter in den RespondToAuthChallengeAPI-Operationen AdminRespondToAuthChallengeund. Amazon Cognito bezieht keine Daten aus dem ClientMetadata Parameter in AdminInitiateAuthund InitiateAuthAPI-Operationen in die Anfrage ein, die es an die Pre-Token-Generierungsfunktion weitergibt.

1
Bereiche

Die OAuth-2.0-Bereiche Ihres Benutzers. Die in einem Zugriffs-Token enthaltenen Bereiche sind die standardmäßigen und benutzerdefinierten Bereiche des Benutzerpools, die Ihr Benutzer angefordert hat und für deren Ausgabe Sie Ihren App-Client autorisiert haben.

2

Antwortparameter für die Vorab-Generierung von Token

Name Beschreibung Minimale Trigger-Ereignisversion
claimsOverrideDetails Ein Container für alle Elemente in einem V1_0-Auslöserereignis. 1
claimsAndScopeOverrideDetails

Ein Container für alle Elemente in einem V2_0-Auslöserereignis.

2
idTokenGeneration

Die Ansprüche, die Sie im ID-Token Ihres Benutzers überschreiben, hinzufügen oder unterdrücken möchten. Diese Werte für die Anpassung des übergeordneten ID-Token erscheinen ausschließlich in Ereignissen der Version 2, während die untergeordneten Elemente in Ereignissen der Version 1 erscheinen.

2
accessTokenGeneration

Die Ansprüche, die Sie im Zugriffs-Token Ihres Benutzers überschreiben, hinzufügen oder unterdrücken möchten. Diese Werte für die Anpassung des Zugriffs-Token als übergeordnetes Element erscheinen ausschließlich in Ereignissen der Version 2.

2
claimsToAddOrOverride

Eine Zuordnung von einem oder mehreren Ansprüchen und deren Werte, die Sie hinzufügen oder ändern möchten. Für gruppenbezogene Ansprüche verwenden Sie stattdessen groupOverrideDetails.

Bei Ereignissen der Version 2 erscheint dieses Element unter accessTokenGeneration und idTokenGeneration.

1*
claimsToSuppress

Eine Liste der Ansprüche, die Amazon Cognito unterdrücken soll. Wenn Ihre Funktion einen Anspruchswert unterdrückt und ersetzt, unterdrückt Amazon Cognito den Anspruch.

Bei Ereignissen der Version 2 erscheint dieses Element unter accessTokenGeneration und idTokenGeneration.

1
groupOverrideDetails

Das Ausgabeobjekt, das die aktuelle Gruppenkonfiguration enthält. Das Objekt umfasst groupsToOverride, iamRolesToOverride und preferredRole.

Ihre Funktion ersetzt das groupOverrideDetails-Objekt durch das von Ihnen bereitgestellte Objekt. Wenn Sie ein leeres oder Null-Objekt in der Antwort angeben, löscht Amazon Cognito die Gruppen. Wenn die bestehende Gruppenkonfiguration unverändert beibehalten werden soll, kopieren Sie den Wert des groupConfiguration-Objekts der Anforderung in das groupOverrideDetails-Objekt der Antwort. Übergeben Sie es dann zurück an den Service.

Amazon-Cognito-ID und Zugriffstoken enthalten beide den cognito:groups-Anspruch. Ihr groupOverrideDetails-Objekt ersetzt den cognito:groups-Anspruch in Zugriffs-Token und in ID-Token.

1
scopesToAdd

Eine Liste der OAuth-2.0-Bereiche, die Sie dem scope-Anspruch im Zugriffs-Token Ihres Benutzers hinzufügen möchten. Sie können keine Bereichswerte hinzufügen, die ein oder mehrere Leerzeichen enthalten.

2
scopesToSuppress

Eine Liste der OAuth-2.0-Bereiche, die Sie aus dem scope-Anspruch im Zugriffs-Token Ihres Benutzers entfernen möchten.

2

* Antwortobjekte auf Ereignisse der Version 1 können Zeichenketten zurückgeben. Antwortobjekte auf Ereignisse der Version 2 können komplexe Objekte zurückgeben.

Beispiel für ein Pre-Token-Auslöserereignis, Version 2: Ansprüche, Bereiche und Gruppen hinzufügen und unterdrücken

In diesem Beispiel werden die folgenden Änderungen an den Token eines Benutzers vorgenommen.

  1. Legt ihren family_name als Doe im ID-Token fest.

  2. Verhindert, dass email- und phone_number-Ansprüche im ID-Token erscheinen.

  3. Legt ihren ID-Token-cognito:roles-Anspruch auf "arn:aws:iam::123456789012:role\/sns_callerA","arn:aws:iam::123456789012:role\/sns_callerC","arn:aws:iam::123456789012:role\/sns_callerB" fest.

  4. Legt ihren ID-Token-cognito:preferred_role-Anspruch auf arn:aws:iam::123456789012:role/sns_caller fest.

  5. Fügt die Bereiche openid, email und solar-system-data/asteroids.add zum Zugriffstoken hinzu.

  6. Unterdrückt den Bereich phone_number und aws.cognito.signin.user.admin aus dem Zugriffstoken. Durch das Entfernen von phone_number wird das Abrufen der Telefonnummer des Benutzers von userInfo verhindert. Durch das Entfernen von aws.cognito.signin.user.admin werden API-Anfragen des Benutzers zum Lesen und Ändern des eigenen Profils mit der Amazon-Cognito-Benutzerpool-API verhindert.

    Anmerkung

    Das Entfernen von phone_number aus Bereichen verhindert nur dann das Abrufen der Telefonnummer eines Benutzers, wenn die verbleibenden Bereiche im Zugriffstoken openid und mindestens einen weiteren Standardbereich enthalten. Weitere Informationen finden Sie unter Grundlegendes zu Bereichen.

  7. Legt den ID-Token-cognito:groups-Anspruch auf "new-group-A","new-group-B","new-group-C" fest.

JavaScript
export const handler = function(event, context) { event.response = { "claimsAndScopeOverrideDetails": { "idTokenGeneration": { "claimsToAddOrOverride": { "family_name": "Doe" }, "claimsToSuppress": [ "email", "phone_number" ] }, "accessTokenGeneration": { "scopesToAdd": [ "openid", "email", "solar-system-data/asteroids.add" ], "scopesToSuppress": [ "phone_number", "aws.cognito.signin.user.admin" ] }, "groupOverrideDetails": { "groupsToOverride": [ "new-group-A", "new-group-B", "new-group-C" ], "iamRolesToOverride": [ "arn:aws:iam::123456789012:role/new_roleA", "arn:aws:iam::123456789012:role/new_roleB", "arn:aws:iam::123456789012:role/new_roleC" ], "preferredRole": "arn:aws:iam::123456789012:role/new_role", } } }; // Return to Amazon Cognito context.done(null, event); };

Amazon Cognito übergibt Ereignisinformationen an Ihre Lambda-Funktion. Die Funktion gibt dann das gleiche Ereignisobjekt mit allen Änderungen in der Antwort an Amazon Cognito zurück. Sie können in der Lambda-Konsole ein Testereignis mit den für Ihren Lambda-Auslöser relevanten Daten einrichten. Das Folgende ist ein Testereignis für dieses Codebeispiel:

JSON
{ "version": "2", "triggerSource": "TokenGeneration_Authentication", "region": "us-east-1", "userPoolId": "us-east-1_EXAMPLE", "userName": "JaneDoe", "callerContext": { "awsSdkVersion": "aws-sdk-unknown-unknown", "clientId": "1example23456789" }, "request": { "userAttributes": { "sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "cognito:user_status": "CONFIRMED", "email_verified": "true", "phone_number_verified": "true", "phone_number": "+12065551212", "family_name": "Zoe", "email": "Jane.Doe@example.com" }, "groupConfiguration": { "groupsToOverride": ["group-1", "group-2", "group-3"], "iamRolesToOverride": ["arn:aws:iam::123456789012:role/sns_caller1", "arn:aws:iam::123456789012:role/sns_caller2", "arn:aws:iam::123456789012:role/sns_caller3"], "preferredRole": ["arn:aws:iam::123456789012:role/sns_caller"] }, "scopes": [ "aws.cognito.signin.user.admin", "openid", "email", "phone" ] }, "response": { "claimsAndScopeOverrideDetails": [] } }

Beispiel für das Ereignis vor der Token-Generierung, Version 2: Fügen Sie Ansprüche mit komplexen Objekten hinzu

In diesem Beispiel werden die folgenden Änderungen an den Token eines Benutzers vorgenommen.

  1. Fügt dem ID-Token Ansprüche der Typen Zahl, Zeichenfolge, Boolean und JSON hinzu. Dies ist die einzige Änderung, die durch Trigger-Ereignisse der zweiten Version für das ID-Token verfügbar gemacht wird.

  2. Fügt dem Zugriffstoken Ansprüche der Typen Zahl, Zeichenfolge, Boolean und JSON hinzu.

  3. Fügt dem Zugriffstoken drei Bereiche hinzu.

  4. Unterdrückt die sub Ansprüche email und in den ID- und Zugriffstoken.

  5. Unterdrückt den aws.cognito.signin.user.admin Bereich im Zugriffstoken.

JavaScript
export const handler = function(event, context) { var scopes = ["MyAPI.read", "MyAPI.write", "MyAPI.admin"] var claims = {} claims["aud"]= event.callerContext.clientId; claims["booleanTest"] = false; claims["longTest"] = 9223372036854775807; claims["exponentTest"] = 1.7976931348623157E308; claims["ArrayTest"] = ["test", 9223372036854775807, 1.7976931348623157E308, true]; claims["longStringTest"] = "\{\ \"first_json_block\": \{\ \"key_A\": \"value_A\",\ \"key_B\": \"value_B\"\ \},\ \"second_json_block\": \{\ \"key_C\": \{\ \"subkey_D\": [\ \"value_D\",\ \"value_E\"\ ],\ \"subkey_F\": \"value_F\"\ \},\ \"key_G\": \"value_G\"\ \}\ \}"; claims["jsonTest"] = { "first_json_block": { "key_A": "value_A", "key_B": "value_B" }, "second_json_block": { "key_C": { "subkey_D": [ "value_D", "value_E" ], "subkey_F": "value_F" }, "key_G": "value_G" } }; event.response = { "claimsAndScopeOverrideDetails": { "idTokenGeneration": { "claimsToAddOrOverride": claims, "claimsToSuppress": ["email","sub"] }, "accessTokenGeneration": { "claimsToAddOrOverride": claims, "claimsToSuppress": ["email","sub"], "scopesToAdd": scopes, "scopesToSuppress": ["aws.cognito.signin.user.admin"] } } }; console.info("EVENT response\n" + JSON.stringify(event, (_, v) => typeof v === 'bigint' ? v.toString() : v, 2)) console.info("EVENT response size\n" + JSON.stringify(event, (_, v) => typeof v === 'bigint' ? v.toString() : v).length) // Return to Amazon Cognito context.done(null, event); };

Amazon Cognito übergibt Ereignisinformationen an Ihre Lambda-Funktion. Die Funktion gibt dann das gleiche Ereignisobjekt mit allen Änderungen in der Antwort an Amazon Cognito zurück. Sie können in der Lambda-Konsole ein Testereignis mit den für Ihren Lambda-Auslöser relevanten Daten einrichten. Das Folgende ist ein Testereignis für dieses Codebeispiel:

JSON
{ "version": "2", "triggerSource": "TokenGeneration_HostedAuth", "region": "us-west-2", "userPoolId": "us-west-2_EXAMPLE", "userName": "JaneDoe", "callerContext": { "awsSdkVersion": "aws-sdk-unknown-unknown", "clientId": "1example23456789" }, "request": { "userAttributes": { "sub": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "cognito:user_status": "CONFIRMED" "email_verified": "true", "phone_number_verified": "true", "phone_number": "+12065551212", "email": "Jane.Doe@example.com" }, "groupConfiguration": { "groupsToOverride": ["group-1", "group-2", "group-3"], "iamRolesToOverride": ["arn:aws:iam::123456789012:role/sns_caller1"], "preferredRole": ["arn:aws:iam::123456789012:role/sns_caller1"] }, "scopes": [ "aws.cognito.signin.user.admin", "phone", "openid", "profile", "email" ] }, "response": { "claimsAndScopeOverrideDetails": [] } }

Beispiel für ein Version-Eins-Ereignis vor der Token-Generierung: Hinzufügen eines neuen Anspruchs und Löschen eines vorhandenen Anspruchs

In diesem Beispiel wird ein Trigger-Ereignis der Version 1 mit einer Pre-Token-Generierungs-Lambda-Funktion verwendet, um einen neuen Anspruch hinzuzufügen und einen vorhandenen Anspruch zu unterdrücken.

Node.js
const handler = async (event) => { event.response = { claimsOverrideDetails: { claimsToAddOrOverride: { my_first_attribute: "first_value", my_second_attribute: "second_value", }, claimsToSuppress: ["email"], }, }; return event; }; export { handler };

Amazon Cognito übergibt Ereignisinformationen an Ihre Lambda-Funktion. Die Funktion gibt dann das gleiche Ereignisobjekt mit allen Änderungen in der Antwort an Amazon Cognito zurück. Sie können in der Lambda-Konsole ein Testereignis mit den für Ihren Lambda-Auslöser relevanten Daten einrichten. Das Folgende ist ein Testereignis für dieses Codebeispiel: Da das Code-Beispiel nicht alle Anforderungsparameter verarbeitet, können Sie ein Testereignis mit einer leeren Anfrage verwenden. Weitere Informationen zu allgemeinen Anforderungsparametern finden Sie unter Lambda-Auslöserereignis für einen Benutzerpool.

JSON
{ "request": {}, "response": {} }

Beispiel für ein Version-Eins-Ereignis vor der Token-Generierung: Ändern der Gruppenmitgliedschaft des Benutzers

In diesem Beispiel wird ein Trigger-Ereignis der Version 1 mit einer Pre-Token-Generierungs-Lambda-Funktion verwendet, um die Gruppenmitgliedschaft des Benutzers zu ändern.

Node.js
const handler = async (event) => { event.response = { claimsOverrideDetails: { groupOverrideDetails: { groupsToOverride: ["group-A", "group-B", "group-C"], iamRolesToOverride: [ "arn:aws:iam::XXXXXXXXXXXX:role/sns_callerA", "arn:aws:iam::XXXXXXXXX:role/sns_callerB", "arn:aws:iam::XXXXXXXXXX:role/sns_callerC", ], preferredRole: "arn:aws:iam::XXXXXXXXXXX:role/sns_caller", }, }, }; return event; }; export { handler };

Amazon Cognito übergibt Ereignisinformationen an Ihre Lambda-Funktion. Die Funktion gibt dann das gleiche Ereignisobjekt mit allen Änderungen in der Antwort an Amazon Cognito zurück. Sie können in der Lambda-Konsole ein Testereignis mit den für Ihren Lambda-Auslöser relevanten Daten einrichten. Das Folgende ist ein Testereignis für dieses Codebeispiel:

JSON
{ "request": {}, "response": {} }