2017-10-02 4 views
1

Ich baue eine serverlose Reaktion App, die Cognito für die Anmeldung/Abmeldung verwendet. Die App ruft das API-Gateway auf, das für die Verwendung des Cognito-Benutzerpools als benutzerspezifischen Autor konfiguriert ist.Wann validiert API Gateway widerrufene Cognito ID-Token

Ich baue auch eine Lambda-Funktion, um einen Benutzer abzumelden (cognitoIdentityServiceProvider.globalSignOut).

Wenn ich mich in der App anmelde und dann die Lambda-Funktion zur Ausführung einer Administrator-Abmeldung aufruft, sind Aufrufe an geschützte API-Gateway-Funktionen aus der App noch gültig (mit Cognito ID-Token in Authorization Header übergeben);

Sind Administratoranrufe wie cognitoIdentityServiceProvider.globalSignOut und cognitoIdentityServiceProvider.adminUserGlobalSignOut nicht in Echtzeit oder ist das API-Gateway so konfiguriert, dass es nur nach einer Stunde validiert wird?

Antwort

0

Nur die Antwort gefunden, leider nicht das, was ich hören wollte:

Da IdToken als JSON-Web Key Token dargestellt wird, ist es unterzeichnet mit einem geheimen oder privaten/öffentlichen Schlüsselpaare, was bedeutet, auch wenn Sie das IdToken widerrufen, gibt es keine Möglichkeit, den verteilten öffentlichen Schlüssel zu widerrufen. Und IdToken hat eine kurze Lebensdauer, es wird in einer kurzen Zeit ablaufen.

Is it possible to revoke AWS Cognito IdToken?

https://github.com/aws/aws-sdk-js/issues/1687

https://github.com/aws/amazon-cognito-identity-js/issues/21

0

Dies sind die Standardeinstellungen des Cognito-Benutzerpools. Das Zugriffstoken läuft eine Stunde nach der Authentifizierung des Benutzers ab. Es sollte nicht verarbeitet werden, nachdem es abgelaufen ist.

Sie können alle Benutzer-Token mit den APIs GlobalSignOut und AdminUserGlobalSignOut widerrufen. Nachdem der Benutzer abgemeldet wurde:

  • Das Aktualisierungs-Token des Benutzers kann nicht verwendet werden, um neue Token für den Benutzer zu erhalten.
  • Das Zugriffstoken des Benutzers kann nicht für den Benutzerpooldienst verwendet werden.
  • Der Benutzer muss sich erneut authentifizieren, um neue Token zu erhalten.
  • Eine App kann die GlobalSignOut API verwenden, um es einzelnen Benutzern zu ermöglichen, sich von allen Geräten abzumelden. In der Regel wird diese Option von einer App angezeigt, z. B. Abmelden von allen Geräten. Die App muss diese Methode mit dem gültigen, nicht explizierten Zugriffstoken des Benutzers aufrufen. Diese Methode kann nicht verwendet werden, um einem Benutzer das Abmelden eines anderen Benutzers zu ermöglichen.

    Eine Administrator-App kann die AdminUserGlobalSignOut-API verwenden, damit Administratoren einen Benutzer von allen Geräten abmelden können. Die Administrator-App muss diese Methode mit den Anmeldeinformationen des AWS-Entwicklers aufrufen und die Benutzerpool-ID und den Benutzernamen des Benutzers als Parameter übergeben. Die AdminUserGlobalSignOut-API kann jeden Benutzer im Benutzerpool abmelden.

    Bitte schauen Sie auf der offiziellen Dokumentation: - http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html

    +0

    danke für die Antwort, aber könnten Sie bestätigen, dass der Aufruf von 'adminUserGlobalSignOut' den Benutzer sofort abmeldet oder * nicht *, sondern erst danach, wenn das Refresh-Token vor einer Stunde verwendet werden muss. In meinem Fall muss ich die Benutzersitzung sofort beenden, aber das scheint nicht der Fall zu sein, da der 'authorization' Header mit dem Token beim Aufruf von API Gateway immer noch eine gültige Sitzung anzeigt (dh API Gateway gibt kein Fehler bei ungültigem Benutzertoken oder ähnlichem, wie zB "Zugriffstoken wurde widerrufen." Bitte aktualisieren Sie Ihre Antwort entsprechend mit dem bekannten Verhalten von API Gateway. – user1322092

    +0

    habe meine Frage aktualisiert, um Klarheit über das Token zu haben. API Gateway benutzerdefiniertes Authorizer, das ein Cognito verwendet Benutzerpool erfordert nur das Cognito-ID-Token ('axios.defaults.headers.common.Authorization = session.idToken.jwtToken;'). – user1322092

    0

    ich im Team bin Cognito. globalSignOut entzieht das Zugriffstoken und das Aktualisierungstoken. Das ID-Token ist ein Bearer-Token, das bei Systemen außerhalb von Benutzer-Pools verwendet wird.Das API-Gateway akzeptiert es weiterhin, aber es hat eine Gültigkeit von 1 Stunde.

    +0

    Danke, Ionut !. Meine serverlose Webanwendung verwendet einen Cognito-Benutzerpoolautorizer in API-Gateway, um zu erzwingen API-Sicherheit: Das API-Gateway validiert nur das ID-Token (nicht Access oder Refresh). Wenn eine Lambda-Cron-Funktion 20 min nach der Anmeldung adminUserGlobalSignOut aufruft, akzeptiert das API-Gateway das Token über die zwanzig Minuten hinaus o eine Stunde. Ich würde sagen, das ist eine Designlücke, findest du? Letztendlich versuche ich, ein serverbasiertes Framework nachzuahmen, bei dem Sitzungen oft 15-30min ablaufen. Cognito scheint auf Erfahrungen mit mobilen Apps fixiert zu sein, bei denen eine Stunde oder länger angemessen ist. – user1322092

    Verwandte Themen