Anti-Pattern: Lange Ablaufzeit für OAuth-Tokens festlegen

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen.

Apigee bietet eine Reihe von Tools und Richtlinien, mit denen Sie die OAuth 2.0-tokenbasierte Authentifizierung implementieren können, um Ihre APIs zu schützen. OAuth2, beschrieben in IETF RFC 6749, ist der am weitesten unterstützte offene Standard für die Authentifizierung und Autorisierung von APIs. Dabei wird das Token als Anmeldedaten im Standardformat festgelegt, das Clientanwendungen an API-Implementierungen senden. Die API-Implementierung kann das Token prüfen, um festzustellen, ob der Client zum Zugriff auf die API berechtigt ist.

Mit Apigee können Entwickler Zugriffs- und/oder Aktualisierungs-Token generieren. Dazu müssen Sie einen der vier OAuth2-Grant-Typen – Client-Anmeldedaten, Passwort, Implizit und Autorisierungscode – mit der OAuthv2-Richtlinie implementieren. Darüber hinaus können API-Entwickler mit Apigee benutzerdefinierte Berechtigungen implementieren, einschließlich Berechtigungen, die dem Token-Austauschmuster folgen, wie in IETF RFC 8693 beschrieben. Clientanwendungen verwenden dann Zugriffstoken, um sichere APIs zu nutzen. Für jedes Zugriffstoken gilt ein eigenes Ablaufdatum, das in der OAuthv2-Richtlinie bestimmt werden kann.

Apigee kann optional ein Aktualisierungstoken zusammen mit dem Zugriffstoken für einige der Berechtigungstypen generieren und zurückgeben. Ein Client verwendet ein Aktualisierungstoken, um ein neues Zugriffstoken abzurufen, nachdem das ursprüngliche Zugriffstoken widerrufen oder abgelaufen ist. Die Ablaufzeit für das Aktualisierungstoken kann auch in der OAuthv2-Richtlinie festgelegt werden.

Anti-Pattern

Wenn Sie in der OAuthv2-Richtlinie eine lange Ablaufzeit für ein Zugriffs- oder Aktualisierungstoken festlegen, führt dies zu einer längeren Sicherheitslücke bei einem Token-Leak, was ein Sicherheitsrisiko darstellt. Außerdem kann es zu einer Ansammlung von OAuth-Tokens im persistenten Speicher führen, was im Laufe der Zeit zu einer Leistungsminderung führen kann.

Beispiel 1

Die folgende OAuthV2-Beispielrichtlinie bestimmt eine lange Ablaufzeit von 10 Tagen für die Zugriffstokens:

<OAuthV2 name="OAuth-GenerateAccessToken">
    <Operation>GenerateAccessToken</Operation>
    <ExpiresIn>864000000</ExpiresIn> <!-- 10 days -->
    <RefreshTokenExpiresIn>864000000</RefreshTokenExpiresIn> <!-- 10 days -->
    <SupportedGrantTypes>
      <GrantType>authorization_code</GrantType>
    </SupportedGrantTypes>
    <GenerateResponse enabled="true"/>
</OAuthV2>

Im obigen Beispiel:

  • Die Lebensdauer des Zugriffstokens ist auf 10 Tage festgelegt.
  • Die Lebensdauer des Aktualisierungstokens ist ebenfalls auf 10 Tage festgelegt.

Auswirkungen

Langlebige Zugriffstokens stellen ein Sicherheitsrisiko dar. Bei einem Token-Leak oder -Verlust läuft ein kurzlebiges Token natürlich ab und wird unbrauchbar. Ein langlebiges Token hingegen gewährt möglicherweise über einen längeren Zeitraum Zugriff auf die API, was das Risiko erhöht.

Ein Zugriffstoken sollte eine kurze Lebensdauer haben, wahrscheinlich etwa 30 Minuten oder weniger. Diese Lebensdauer sollte wesentlich kürzer als die des Aktualisierungstokens sein.

Beispiel 2

Die folgende OAuthV2-Beispielrichtlinie bestimmt eine lange Ablaufzeit von 200 Tagen für Aktualisierungstoken:

<OAuthV2 name="OAuth-GenerateAccessToken">
  <Operation>GenerateAccessToken</Operation>
  <ExpiresIn>1800000</ExpiresIn> <!-- 30 minutes -->
  <RefreshTokenExpiresIn>17280000000</RefreshTokenExpiresIn> <!-- 200 days -->
  <SupportedGrantTypes>
    <GrantType>authorization_code</GrantType>
  </SupportedGrantTypes>
  <GenerateResponse enabled="true"/>
</OAuthV2>

Im obigen Beispiel:

  • Das Zugriffstoken ist auf eine angemessene und kurze Ablaufzeit von 30 Minuten eingestellt.
  • Das Aktualisierungstoken hat eine sehr lange Ablaufzeit von 200 Tagen.
  • Wenn der Traffic zu dieser API zehn Anfragen pro Sekunde beträgt, kann das bis zu 864.000 Token pro Tag generieren.
  • Aktualisierungstokens laufen nach 200 Tagen ab und werden während der gesamten Lebensdauer im Datenspeicher gesammelt.

Auswirkungen

Eine längere Gültigkeitsdauer von Refresh-Tokens kann im Laufe der Zeit zu Leistungseinbußen führen, da sich eine große Anzahl von Tokens im Datenspeicher ansammelt. In Apigee Hybrid kann eine übermäßige Tokenansammlung auch zur Ausschöpfung des Speicherplatzes in der Persistenzschicht beitragen.

Best Practice

Verwenden Sie eine Ablaufzeit für OAuth-Zugriffs- und Aktualisierungstokens, die Ihren spezifischen Sicherheitsanforderungen entspricht, um das Risiko von Sicherheitslücken bei geleakten Tokens zu verringern und eine Token-Ansammlung im Datenspeicher zu vermeiden. Ein guter Ausgangspunkt für die Lebensdauer des Zugriffstokens ist 30 Minuten. Für die Lebensdauer des Aktualisierungstokens empfehlen wir 24 Stunden.

Legen Sie die Ablaufzeit für Aktualisierungstoken so fest, dass sie ein Vielfaches der Lebensdauer der Zugriffstoken ist. Wenn Sie beispielsweise 30 Minuten für das Zugriffstoken festlegen, müssen Sie die Lebensdauer des Aktualisierungstokens auf 24 Stunden oder 7 Tage festlegen, je nachdem, was für die von Ihnen zu unterstützende Nutzererfahrung geeignet ist.

Weitere Informationen