Aws-Zugangstoken

Anpassen von Zugriffstoken in Amazon Cognito-Benutzerpools

von Edward Sunon in Amazon Cognito, Best Practices, Intermediate (200), Sicherheit, Identität und Compliance, Technische AnleitungenPermalink Kommentare Teilen

Mit Amazon Cognito können Sie Customer Identity and Access Management (CIAM) in Ihre Web- und Mobilanwendungen implementieren. Sie können Ihren Anwendungen in wenigen Minuten Benutzerauthentifizierung und Zugriffskontrolle hinzufügen.

In diesem Beitrag stelle ich Ihnen die neue Funktion zur Anpassung von Zugriffstoken für Amazon Cognito-Benutzerpools vor und zeige Ihnen, wie Sie sie verwenden. Die Anpassung des Zugriffstokens ist in den erweiterten Sicherheitsfunktionen (ASF) von Amazon Cognito enthalten. Beachten Sie, dass ASF zusätzlichen Preisen unterliegt, wie auf der Preisseite von Amazon Cognito beschrieben.

Was ist die Anpassung von Zugriffstoken?

Wenn sich ein Benutzer bei Ihrer App anmeldet, überprüft Amazon Cognito seine Anmeldung und wenn der Benutzer erfolgreich authentifiziert wurde, gibt er die ID-, Zugriffs- und Aktualisierungstoken zurück. Das Zugriffstoken, das das JWT-Format (JSON Web Token) gemäß dem RFC7519-Standard verwendet, enthält Ansprüche in der Tokennutzlast, die den zu authentifizierenden Prinzipal identifizieren , sowie Sitzungsattribute wie Authentifizierungszeit und Tokenablaufzeit. Noch wichtiger ist, dass das Zugriffstoken auch Autorisierungsattribute in Form von Benutzergruppenmitgliedschaften und OAuth-Bereichen enthält. Ihre Anwendungen oder API-Ressourcenserver können die Tokenansprüche auswerten, um bestimmte Aktionen im Namen von Benutzern zu autorisieren.

Mit der Anpassung des Zugriffstokens können Sie dem Standardzugriffstoken anwendungsspezifische Ansprüche hinzufügen und dann differenzierte Autorisierungsentscheidungen treffen, um eine differenzierte Endbenutzererfahrung zu bieten. Sie können die ursprünglichen Bereichsansprüche verfeinern, um den Zugriff auf Ihre Ressourcen weiter einzuschränken und zu erzwingen Der am wenigsten privilegierte Zugang. Sie können Zugriffstoken auch mit Ansprüchen aus anderen Quellen anreichern, z. B. mit Benutzerabonnementinformationen, die in einer Amazon DynamoDB-Tabelle gespeichert sind. Ihre Anwendung kann diesen angereicherten Anspruch verwenden, um die Zugriffsebene und den Inhalt zu bestimmen, der dem Benutzer zur Verfügung steht. Dadurch wird die Notwendigkeit reduziert, eine benutzerdefinierte Lösung zum Nachschlagen von Attributen im Code Ihrer Anwendung zu erstellen , wodurch die Anwendungskomplexität reduziert, die Leistung verbessert und die Integration mit nachgelagerten Anwendungen geglättet wird.

Wie verwende ich die Funktion zum Anpassen des Zugriffstokens?

Amazon Cognito arbeitet mit AWS Lambda-Funktionen zusammen, um das Authentifizierungsverhalten und die Endbenutzererfahrung Ihres Benutzerpools zu ändern. In diesem Abschnitt erfahren Sie, wie Sie eine Lambda-Auslösefunktion vor der Token-Generierung konfigurieren und sie während des Amazon Cognito-Authentifizierungsprozesses aufrufen. Ich zeige Ihnen auch eine Beispielfunktion, um Ihnen zu helfen Schreiben Sie Ihre eigene Lambda-Funktion.

Lambda-Auslöser-Ablauf

Während einer Benutzerauthentifizierung können Sie festlegen, dass Amazon Cognito einen Auslöser vor der Token-Generierung aufruft, um Ihre Token anzureichern und anzupassen.

Abbildung 1: Trigger-Ablauf vor der Token-Generierung

Abbildung 1 veranschaulicht den Trigger-Ablauf vor der Token-Generierung. Dieser Ablauf umfasst die folgenden Schritte:

  1. Ein Endbenutzer meldet sich bei Ihrer App an und authentifiziert sich bei einem Amazon Cognito-Benutzerpool.
  2. Nachdem der Benutzer die Authentifizierung abgeschlossen hat, ruft Amazon Cognito den Lambda-Auslöser vor der Token-Generierung auf und sendet Ereignisdaten an Ihre Lambda-Funktion, z. B . userAttributes und Bereiche, in einem Auslöserereignis vor der Token-Generierung.
  3. Ihr Lambda-Funktionscode verarbeitet die Token-Anreicherungslogik und gibt ein Antwortereignis an Amazon Cognito zurück, um die Ansprüche anzugeben, die , die Sie hinzufügen oder unterdrücken möchten.
  4. Amazon Cognito stellt ein angepasstes JWT für Ihre Anwendung bereit.

Der Auslöser-Flow vor der Token-Generierung unterstützt OAuth 2.0-Grant-Typen, wie z. B. den Authorization Code Grant-Flow und den impliziten Grant-Flow, und unterstützt auch die Benutzerauthentifizierung über das AWS SDK.

Aktivieren der Anpassung von Zugriffstoken

Ihr Amazon Cognito-Benutzerpool stellt zwei verschiedene Versionen des Auslöseereignisses vor der Token-Generierung für Ihre Lambda-Funktion bereit. Auslöseereignis Version 1 enthält userAttributes, groupConfiguration und clientMetadata in der Ereignisanforderung, die Sie zum Anpassen von ID-Token-Ansprüchen verwenden können. Triggerereignisversion 2 fügt der Ereignisanforderung einen Bereich hinzu, den Sie zum Anpassen von Bereichen im Zugriffstoken zusätzlich zum Anpassen anderer Ansprüche verwenden können.

In diesem Abschnitt zeige ich Ihnen , wie Sie aktualisieren können Ihr Benutzerpool, um Ereignisversion 2 auszulösen und die Anpassung des Zugriffstokens zu aktivieren.

So aktivieren Sie die Anpassung des Zugriffstokens

  1. Öffnen Sie die Cognito-Benutzerpoolkonsole und wählen Sie dann Benutzerpools aus.
  2. Wählen Sie den Zielbenutzerpool für die Tokenanpassung aus.
  3. Wählen Sie auf der  Registerkarte User pool properties (Eigenschaften des Benutzerpools) im  Abschnitt Lambda-Auslöser (Lambda-Auslöser hinzufügen)  die Option Add Lambda trigger (Lambda-Auslöser hinzufügen ) aus.
  4. Abbildung 2: Hinzufügen eines Lambda-Auslösers

  5. Führen Sie im Abschnitt Lambda-Auslöser die
    1. folgenden Schritte aus: Wählen Sie für Trigger type die Option Authentication (Authentifizierung ) aus.
    2. Wählen Sie für Authentifizierung die Option Trigger vor der Tokengenerierung aus.
    3. für Auslösen der Ereignisversion , wählen Sie Grundlegende Funktionen + Anpassung des Zugriffstokens – Empfohlen aus. Wenn Ihnen diese Option nicht zur Verfügung steht, stellen Sie sicher, dass Sie erweiterte Sicherheitsfunktionen aktiviert haben. Sie müssen erweiterte Sicherheitsfunktionen aktiviert haben, um auf diese Option zugreifen zu können.
  6. Abbildung 3: Lambda-Auslöser auswählen

  7. Wählen Sie Ihre Lambda-Funktion aus und weisen Sie sie als Auslöser vor der Token-Generierung zu. Wählen Sie dann Add Lambda trigger (Lambda-Auslöser hinzufügen ) aus.
  8. Abbildung 4: Hinzufügen eines Lambda-Auslösers

Beispiel für einen Auslöser vor der Token-Generierung

Nachdem Sie die Anpassung des Zugriffstokens aktiviert haben, führe ich Sie durch ein Codebeispiel für den Lambda-Auslöser vor der Token-Generierung und das Auslöserereignis der Version 2. In diesem Codebeispiel wird die Anforderung des Triggerereignisses untersucht und eine neue benutzerdefinierte claim und einen benutzerdefinierten OAuth-Bereich in der Antwort für Amazon Cognito an, um das Zugriffstoken an verschiedene Autorisierungsschemata anzupassen.

Hier sehen Sie ein Beispiel für ein Triggerereignis der Version 2. Die Ereignisanforderung enthält die Benutzerattribute aus dem Amazon Cognito-Benutzerpool, die ursprünglichen Bereichsansprüche und die ursprünglichen Gruppenkonfigurationen. Sie verfügt über zwei benutzerdefinierte Attribute – membership und location –, die während des Benutzerregistrierungsprozesses erfasst und im Cognito-Benutzerpool gespeichert werden.

Im folgenden Codebeispiel habe ich das location-Attribut und das membership-Attribut des Benutzers transformiert, um einen benutzerdefinierten Anspruch und einen benutzerdefinierten Bereich hinzuzufügen. Ich habe das Feld claimsToAddOrOverride verwendet, um einen neuen benutzerdefinierten Anspruch namens demo:membershipLevel mit dem Mitgliedschaftswert Premium aus der Ereignisanforderung zu erstellen. Ich habe auch einen neuen Geltungsbereich mit dem Wert von membership:USA erstellt. Premium über den scopesToAdd-Anspruch , und den neuen Anspruch und Bereich in der Ereignisantwort.

Mit dem vorherigen Code sendet der Lambda-Auslöser die folgende Antwort an Amazon Cognito zurück, um die Anpassung anzugeben, die für die Zugriffstoken erforderlich war.

Anschließend gibt Amazon Cognito zur Laufzeit Token mit diesen Anpassungen aus:

Ihre Anwendung kann dann den neu geprägten, benutzerdefinierten Bereich und Anspruch verwenden, um Benutzer zu autorisieren und ihnen eine personalisierte Erfahrung zu bieten.

Überlegungen und bewährte Methoden

Es gibt vier allgemeine Überlegungen und bewährte Methoden, die Sie befolgen können:

  1. Einige Ansprüche und Bereiche sind nicht anpassbar. Sie können z. B. Ansprüche wie auth_time, iss und sub oder Bereiche wie aws.cognito.signin.user.admin nicht anpassen. Eine vollständige Liste der ausgeschlossenen Ansprüche und Bereiche finden Sie unter Ausgeschlossene Ansprüche und Bereiche.
  2. Rückwärts arbeiten von Genehmigung . Wenn Sie Zugriffstoken anpassen, sollten Sie mit Ihrem vorhandenen Autorisierungsschema beginnen und dann entscheiden, ob Sie die Bereiche oder Ansprüche oder beides anpassen möchten. Standardmäßige OAuth-basierte Autorisierungsszenarien, wie z. B. Amazon API Gateway-Genehmiger, verwenden in der Regel benutzerdefinierte Bereiche, um Zugriff zu gewähren. Wenn Sie jedoch komplexe oder differenzierte Autorisierungsanforderungen haben, sollten Sie in Betracht ziehen, sowohl Bereiche als auch benutzerdefinierte Ansprüche zu verwenden, um zusätzliche Kontextdaten an die Anwendung oder an einen richtlinienbasierten Zugriffskontrolldienst wie Amazon Verified Permissions zu übergeben.
  3. Etablieren Sie Governance bei der Tokenanpassung . Sie sollten über eine konsistente Unternehmensrichtlinie verfügen, um Nomenklaturleitlinien für Bereiche und Ansprüche bereitzustellen. Ein Syntaxstandard fördert global eindeutige Variablen und vermeidet Namenskonflikte zwischen verschiedenen Anwendungsteams. Beispiel: Anwendung X bei AnyCompany können ihren Bereich als ac.appx.claim_name benennen, wobei ac AnyCompany als globaler Bezeichner und appx.claim_name den benutzerdefinierten Anspruch von Application X darstellt.
  4. Achten Sie auf Grenzen . Da Token über verschiedene Netzwerke und Systeme geleitet werden, müssen Sie sich über mögliche Einschränkungen der Token-Größe in Ihren Systemen im Klaren sein. Sie sollten die Bereichs- und Anspruchsnamen so kurz wie möglich halten, aber dennoch beschreibend sein.

Fazit

In diesem Beitrag haben Sie gelernt, wie Sie einen Lambda-Auslöser vor der Token-Generierung in Ihren Amazon Cognito-Benutzerpool integrieren, um Zugriffstoken anzupassen. Sie können die Funktion zum Anpassen von Zugriffstoken verwenden, um Ihren Endbenutzern differenzierte Dienste basierend auf Ansprüchen und OAuth-Bereichen bereitzustellen. Weitere Informationen finden Sie unter Lambda-Auslöser vor der Token-Generierung im Amazon Cognito-Entwicklerhandbuch.

Wenn Sie Feedback zu diesem Beitrag haben, Senden Sie Kommentare im Abschnitt "Kommentare" unten. Wenn Sie Fragen zu diesem Beitrag haben, wenden Sie sich an den AWS-Support.

Möchten Sie weitere Neuigkeiten zur AWS-Sicherheit erhalten? Folgen Sie uns auf Twitter.

Edward Sun

Edward ist ein Security Specialist Solutions Architect mit Schwerpunkt auf Identitäts- und Zugriffsmanagement. Er liebt es, Kunden bei der Cloud-Transformation mit Architekturdesign, Best Practices für die Sicherheit, Migration und Kostenoptimierungen zu unterstützen. In seiner Freizeit geht Edward gerne wandern, golfen und feuert seine Alma Mater, die Georgia Bulldogs, an.

STICHWORTE: Amazon Cognito, Sicherheitsblog