Cloudfront unterbricht die Authentifizierung mit JSON Web Token

Cloudfront unterbricht die Authentifizierung mit JSON Web Token

Kurzfassung: Mein JWT-Token übersteht eine Aktualisierung nicht, wenn ich auf eine Domäne hinter Cloudfront verweise.

Ich bin nicht sicher, ob ich das am besten hier oder auf Stackoverflow poste, aber da ich glaube, das Problem auf AWS Cloudfront eingegrenzt zu haben, dachte ich, ich fange hier an.


Mein Setup:

  • Route 53 DNS-Einstellungen verweisen auf Cloudfront-Verteilung
  • 1 Das Cloudfront-Verhalten nimmt API/*-Verkehr entgegen und sendet ihn an die ELB EC2-Instanz, die Node/Express-App hostet
  • 1 Cloudfront-Verhalten nimmt den Standardverkehr und sendet ihn an den S3-Bucket, in dem die Vue-Einzelseiten-App-Dateien gespeichert sind
  • Node/Express-App verwendet Passport.js zur Authentifizierung mit JWT-Strategie
    • Elastische Bohnenstange

Bei mir vor Ort ist alles perfekt. Wenn ich auf meiner Staging-Site laufe und meine Profilseite besuche, werden alle Benutzerdaten in die entsprechenden Felder eingetragen. Wenn ich die Seite aktualisiere, passiert etwas mit dem JWT-Token und alle Benutzerdaten gehen verloren. Das passiert auch auf anderen Seiten hinter der Authentifizierung.

Anstatt meine API-Aufrufe auf die Staging-Umgebung (die sich hinter Cloudfront befindet) zu richten, habe ich versucht, meine API direkt auf meine EC2-Instanz zu richten, und alles hat perfekt funktioniert.

Was muss ich also tun (muss ich bestimmte Header weiterleiten), wenn das Problem auf Cloudfront beschränkt ist, damit das JWT-Token jedes Mal erfolgreich übergeben wird?

Antwort1

Wenn Sie Ihr JWT in einem Header senden, war Ihre Annahme richtig. Sie müssen CloudFront anweisen, den Header an den Ursprung weiterzuleiten. Dies können Sie erreichen, indem Sie Cache Based on Selected Request Headersdie Option in Ihrem Cache-Verhalten auf einen dieser Werte ändern:

  • Alle. Dadurch werden alle Header an den Ursprung weitergeleitet.
  • Whitelist. Anschließend können Sie den Header-Namen hinzufügen, den Sie zum Senden des JWT verwenden (am gebräuchlichsten ist „Authorization“).

Bitte beachten Sie, dass diese Option zwei Funktionen hat:

  1. um bestimmte/alle Header an Ihren Ursprung weiterzuleiten
  2. um Objekte basierend auf diesen Headern zwischenzuspeichern.

Stellen Sie sicher, dass Sie verstehen, welche Auswirkungen dies auf Ihr Cache-Verhalten haben kann. Weitere Informationen hierzu finden Sie unterZwischenspeichern von Inhalten basierend auf Anforderungsheadern

Es gibt eine weitere Option, die Sie in Ihrem Cache-Verhalten konfigurieren können und die ich fast immer verwende: Object Caching. Sie können das Objekt-Caching so einstellen, Use Origin Cache Headersdass Ihre Anwendung das Antwort-Caching steuern kann. Diese Einstellung ist möglicherweise verfügbar oder nicht, je nach Ihrem Ursprung (S3/ALB/EC2) und/oder Ihrem Cache Based on Selected Request HeadersWert.

Hoffe, das hilft.

verwandte Informationen