IBM Cloud Docs
Token validieren

Token validieren

Die Tokenvalidierung ist ein wichtiger Bestandteil der modernen App-Entwicklung. Durch die Validierung von Tokens können Sie Ihre Apps oder APIs vor nicht berechtigten Benutzern schützen. IBM Cloud® App ID verwendet Zugriffs- und Identitätstoken, um sicherzustellen, dass ein Benutzer oder eine Anwendung authentifiziert wird, bevor ihm bzw. ihr Zugriff erteilt wird. Wenn Sie eines der von App ID zur Verfügung gestellten SDKs verwenden, erfolgt das Anfordern und Validieren der Token automatisch für Sie.

Weitere Informationen dazu, wie Token in App ID verwendet werden, finden Sie unter Informationen zu Token.

Token werden verwendet, um zu überprüfen, ob eine Person die ist, die sie zu sein behauptet. Sie bestätigen alle Zugriffsberechtigungen, die der Benutzer für eine bestimmte Dauer haben kann. Wenn sich ein Benutzer bei Ihrer Anwendung anmeldet und ein Token ausgegeben wird, muss Ihre App den Benutzer validieren, bevor ihm Zugriff erteilt wird.

Was ist, wenn ich in einer Sprache arbeite, für die App ID kein SDK hat?

Sie haben drei Optionen:

  • Mit den App ID-APIs arbeiten
  • Eine eigene Validierungslogik implementieren
  • Ein beliebiges OIDC-kompatibles Open-Source-SDK verwenden

App ID-APIs verwenden

Mithilfe von Introspektion können Sie App ID verwenden, um Ihre Token zu validieren.

  1. Senden Sie eine POST-Anforderung an den API-Endpunkt /introspect, um Ihr Token zu validieren. Die Anforderung muss das Token und einen Header für die Basisautorisierung bereitstellen, der die Client-ID und den geheimen Schlüssel enthält.

    Beispielanforderung:

    POST /oauth/v4/<tenantID>/introspect HTTP/1.1
    Host: us-south.appid.cloud.ibm.com
    Content-Type: application/x-www-form-urlencoded
    Authorization: Basic jdFlUaGlZUzAwTW0Tjk15TmpFMw==
    Cache-Control: no-cache
    
    token=XXXXX.YYYYY.ZZZZZ
    
  2. Der Server überprüft den Ablaufzeitpunkt und die Signatur des Tokens und gibt ein JSON-Objekt zurück, das angibt, ob das Token aktiv oder inaktiv ist.

    Beispielantwort:

    {
    "active": true
    }
    

Token manuell validieren

Sie können Ihre Token lokal validieren, indem Sie das Token syntaktisch analysieren, die Tokensignatur verifizieren und die im Token gespeicherten Claims validieren.

  1. Analysieren Sie die Token syntaktisch. Das JSON Web Token(JWT) ist ein Standardverfahren zur sicheren Übermittlung von Informationen. Es besteht aus drei Hauptteilen: Header, Nutzdaten und Signatur. Sie werden base64URL codiert und durch einen Punkt (.) getrennt. Sie können jeden verfügbaren base64URL-Decoder für die Syntaxanalyse des Tokens verwenden. Alternativ können Sie auch eine der aufgelisteten Bibliotheken verwenden, um das Token zu parsen.

    Beispiel für ein verschlüsseltes Token:

    eyJhbGciOiJSUzI1NiIsInR5cCI6IkpPU0UiLCJraWQiOiJhMmszIn0
    .eyJpc3MiOiJhcHBpZC1vYXV0aCIsImF1ZCI6ImFiYzEyMyIsImV4cCI6MTU2NDU2Nn0
    .IycnAGUmMHzpTWbe-qaRsx0B4Zi-SVav710Fb_8CTCQvLrHX9d42WuCZ5bW
    d-ikgEsf6waQxeBfhfwYxwHN87LZupApagVMZtylVAnXhG1pHu_32wbZsPvg6QjzNO
    j6ys2Lfl3qfb5Qrp9u4IsZltKPEN8HdfeOcKXxpw6UqP-8
    

    Beispiel für ein entschlüsseltes Token:

    {
    "alg": "RS256",
    "typ": "JOSE",
    "kid": "a2k3",
    "iss": "https://us-south.appid.cloud.ibm.com/oauth/v4/39a37f57-a227-4bfe-a044-93b6e6050a61",
    "aud": "abc123",
    "exp": 1564566
    }
    
  2. Rufen Sie den Endpunkt /publickeys auf, um Ihre öffentlichen Schlüssel abzurufen. Die zurückgegebenen öffentlichen Schlüssel sind als JSON Web Keys(JWK) formatiert.

    Beispielanforderung:

    GET /oauth/v4/<tenantID>/publickeys HTTP/1.1
    Host: us-south.appid.cloud.ibm.com
    Cache-Control: no-cache
    
  3. Speichern Sie die Schlüssel für eine spätere Verwendung in Ihrem App-Cache. Das Speichern der Schlüssel beschleunigt die Verarbeitung und verhindert netzbedingte Verzögerungen, wenn ein anderer Aufruf erfolgt.

  4. Importieren Sie die Parameter für den öffentlichen Schlüssel.

    Beispielantwort:

    {
    "keys": [
       {
          "kty": "RSA",
          "use": "sig",
          "n": "AsdaE",
          "e": "SDAasw",
          "kid": "ad123dCAz"
       }
    ]
    }
    
    Parameter des öffentlichen Schlüssels
    Parameter Beschreibung
    kty Definiert den verwendeten Algorithmus.
    use Definiert den Zweck des Schlüssels.
    kid Definiert die eindeutige ID des Schlüssels.
    Andere Es können noch weitere Parameter vorhanden sein, die für Ihren Algorithmus spezifisch sind und die ebenfalls importiert werden müssen.
  5. Verifizieren Sie die Signatur des Tokens. Der Token-Header enthält den Algorithmus, mit dem das Token signiert wurde, sowie die Schlüssel-ID oder den Claim kid des übereinstimmenden öffentlichen Schlüssels. Da öffentliche Schlüssel nicht häufig geändert werden, können Sie öffentliche Schlüssel in Ihrer App zwischenspeichern und sie gelegentlich aktualisieren. Wenn der Claim kid des zwischengespeicherten Schlüssels fehlt, können Sie die Token lokal validieren.

    1. Lassen Sie Ihre Anwendung überprüfen, ob der Inhalt des eingehenden Token-Headers mit den Parametern des öffentlichen Schlüssels übereinstimmt.
    2. Überprüfen Sie insbesondere, ob dieselben Algorithmen verwendet wurden und ob Ihr Cache für öffentliche Schlüssel einen Schlüssel mit der relevanten Schlüssel-ID enthält.
    3. Stellen Sie sicher, dass Ihr Hashwert mit der Signatur des PEM-Formulars des öffentlichen Schlüssels übereinstimmt. Der Hashwert kann durch Kombinieren und Hashing des Headers der Nutzdaten des Tokens abgerufen werden. Da eine manuelle Implementierung dieses Prozesses komplex sein kann, sollte möglicherweise eine der aufgelisteten Bibliotheken verwendet werden, um die Signatur zu überprüfen.
  6. Validieren Sie die in den Token gespeicherten Claims. Um zukünftige Prüfungen zu verifizieren, können Sie diese Liste verwenden.

    Behauptungen, die validiert werden müssen
    Claim Beschreibung
    iss Der Aussteller muss mit dem App ID-OAuth-Server identisch sein.
    exp Die aktuelle Uhrzeit muss vor der Ablaufzeit liegen.
    aud Die Zielgruppe muss die Kunden-ID Ihrer App enthalten.
    tenant Der Tenant muss die Tenant-ID Ihrer App enthalten.
    scope Der Umfang der Berechtigungen, die dem Benutzer erteilt wurden. Dies ist für das Zugriffstoken spezifisch.