IBM Cloud Docs
Validation des jetons

Validation des jetons

La validation des jetons est une partie importante dans le processus de développement des applications modernes. En validant des jetons, vous pouvez protéger votre application ou vos API d'utilisateurs non autorisés. IBM Cloud® App ID utilise des jetons d'accès et d'identité pour s'assurer qu'un utilisateur ou une application est authentifié avant l'octroi de l'accès. Si vous utilisez l'un des logiciels SDK fournis par App ID, l'obtention et la validation de vos jetons sont effectuées pour vous !

Pour plus d'informations sur l'utilisation des jetons dans App ID, voir Connaissance des jetons.

Les jetons sont utilisés pour vérifier qu'une personne est bien qui elle dit être. Ils confirment toutes les autorisations d'accès éventuellement détenues par l'utilisateur pour une durée déterminée. Lorsqu'un utilisateur signe dans votre application et qu'il se voit émettre un jeton, votre application doit valider l'utilisateur avant qu'un accès lui soit accordé.

Que faire si j'utilise une langue dans laquelle App ID ne dispose pas de logiciel SDK ?

Trois options s'offrent à vous :

  • Travailler avec les API App ID
  • Implémenter votre propre logique de validation
  • Utiliser n'importe quel logiciel SDK open source compatible OIDC

Utilisation des API App ID

Vous pouvez utiliser App ID pour valider vos jetons à l'aide de l'introspection.

  1. Envoyez une requête POST au noeud final de l'API /introspect pour valider votre jeton. La demande doit fournir le jeton et un en-tête d'autorisation de base contenant l'ID client et le secret.

    Exemple de demande :

    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. Le serveur vérifie la date d'expiration et la signature du jeton et renvoie un objet JSON indiquant si le jeton est actif ou inactif.

    Exemple de réponse :

    {
    "active": true
    }
    

Validation manuelle des jetons

Vous pouvez valider vos jetons localement en les analysant, en vérifiant leur signature et en validant les revendications qui y sont stockées.

  1. Analysez les jetons. Le jeton Web JSON(JWT) est un moyen standard de transmettre des informations en toute sécurité. Il comporte trois parties principales, l'en-tête, le contenu et la signature, Ils sont codés par base64URL et séparés par un point (.). Vous pouvez utiliser n'importe quel décodeur base64URL disponible pour analyser le jeton. Vous pouvez également utiliser l'une des bibliothèques répertoriées pour analyser le jeton.

    Exemple de jeton codé :

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

    Exemple de jeton décodé :

    {
    "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. Effectuez un appel au noeud final /publickeys pour extraire vos clés publiques. Les clés publiques renvoyées sont formatées en tant que clés Web JSON(JWK).

    Exemple de demande :

    GET /oauth/v4/<tenantID>/publickeys HTTP/1.1
    Host: us-south.appid.cloud.ibm.com
    Cache-Control: no-cache
    
  3. Stockez les clés dans le cache de votre application pour une utilisation ultérieure. Le stockage des clés accélère le processus et évite les retards sur le réseau si un autre appel est passé.

  4. Importez les paramètres de clé publique.

    Exemple de réponse :

    {
    "keys": [
       {
          "kty": "RSA",
          "use": "sig",
          "n": "AsdaE",
          "e": "SDAasw",
          "kid": "ad123dCAz"
       }
    ]
    }
    
    Paramètres de la clé publique
    Paramètre Description
    kty Définit l'algorithme utilisé.
    use Définit le but de la clé.
    kid Définit l'ID unique de la clé.
    Autre Il peut y avoir d'autres paramètres spécifiques à votre algorithme qui doivent également être importés.
  5. Vérifiez la signature du jeton. L'en-tête du jeton contient l'algorithme qui a été utilisé pour signer le jeton et l'ID de clé ou la revendication kid de la clé publique correspondante. Comme les clés publiques ne changent pas souvent, vous pouvez les mettre en cache dans votre application et les actualiser de temps en temps. Si votre clé en cache ne contient pas la revendication kid, vous pouvez valider les jetons en local.

    1. Demandez à votre application de vérifier que le contenu de l'en-tête du jeton entrant correspond aux paramètres de la clé publique.
    2. Vérifiez tout particulièrement que les mêmes algorithmes ont été utilisés et que votre cache de clé publique contient une clé avec l'ID de clé approprié.
    3. Assurez-vous que votre valeur hachée est identique à la signature du formulaire PEM de la clé publique. Votre valeur hachée peut être obtenue en combinant et en hachant l'en-tête du contenu du jeton. Ce processus pouvant être complexe à implémenter manuellement, il peut être utile d'utiliser l'une des bibliothèques répertoriées pour valider la signature.
  6. Validez les revendications (claims) stockées dans les jetons. Pour vérifier les futures vérifications, vous pouvez utiliser cette liste.

    Allégations à valider
    Revendication Description
    iss L'émetteur doit être identique à celui du serveur OAuth App ID.
    exp L'heure actuelle doit être antérieure à l'heure d'expiration.
    aud L'audience doit contenir l'ID client de votre application.
    tenant Le titulaire doit contenir l'ID titulaire de votre application.
    scope Portée des droits accordés à l'utilisateur. Spécifique au jeton d'accès.