Configuration de l'authentification JWT

Utilisez les informations suivantes pour configurer l'authentification JWT en fonction de vos besoins métier. Vous pouvez configurer l'authentification JWT pour différents noeuds finaux. Par exemple, les API REST.

Avant de commencer

Avant de commencer à configurer l'authentification JWT, vous devez connaître:
  • Nom de l'émetteur qui génère et signe le jeton Web JSON avec la clé privée. Le nom de l'émetteur peut être nécessaire pour certaines configurations.
  • Clé publique correspondant à la clé privée utilisée pour signer le jeton Web JSON (JWT). Cette clé publique est utilisée pour vérifier la signature du jeton Web JSON (JWT).
  • Données présentes dans le jeton Web JSON (JWT) et zone pouvant être utilisée pour le mappage à un utilisateur OMS.

Procédure

  1. Activez l'authentification JWT pour le noeud final approprié.
    Si le noeud final est une API REST, activez l'authentification JWT en définissant la valeur de la propriété servlet.jwt.auth.enabled sur true dans le fichier customer_overrides.properties . Par exemple, xapirest.servlet.jwt.auth.enabled=true.
  2. En fonction de la décision d'utiliser un type spécifique de chargeur de clés, vous devez définir les configurations appropriées. Le chargeur de clés est utilisé pour obtenir la clé publique afin de vérifier le jeton JWT entrant. Sterling™ Order Management System, par défaut, fournit les types de chargeurs de clés suivants.
    Important : si vous utilisez IBM Sterling® Order Management System on IBM CloudSaaS, ne modifiez pas les propriétés par défaut. Utilisez la propriété spécifique à l'émetteur. Par exemple, ne modifiez pas le chargeur de clés yfs.yfs.jwt.verify.keyloader . A la place, ajoutez un nouveau chargeur de clés spécifique à l'émetteur, yfs.yfs.jwt.< nom_émission>.verify.keyloader.
    Tableau 1. Chargeurs de clés fournis par l'application
    Type de chargeur de clés Description Configurations
    Chargeur de clés de propriétés Il lit une propriété spécifique à partir des propriétés yfs pour obtenir la clé. La propriété contient le "kid" (ID de clé) obtenu à partir de l'en-tête JWT. En fonction de l'enfant, il tente de lire la valeur de la clé à partir des propriétés. La valeur de la clé doit être un format PEM codé Base64 . Les propriétés suivantes doivent être configurées dans le fichier customer_overrides.properties pour utiliser le chargeur de clés de propriétés:
    • yfs.yfs.jwt.verify.keyloader=properties

      Le chargeur de clés spécifique à l'émetteur peut être configuré comme suit: yfs.yfs.jwt.issuer name.verify.keyloader=properties

    • yfs.yfs.jwt.verify.propkeyloader.kid=base64 encoded public key
    Chargeur de clé publique d'URI https Il permet de télécharger la clé publique ou le certificat à partir d'un URI https au moment de la vérification du jeton Web JSON (JWT). Si un URI https est utilisé, le certificat de cet URI https doit être ajouté au magasin de clés de confiance de la machine virtuelle Java ou du serveur d'applications pour que l'application puisse se connecter à l'URI. Les propriétés suivantes doivent être configurées dans le fichier customer_overrides.properties pour utiliser le chargeur de clé publique d'URI https. Par défaut, Sterling Order Management System fournit les chargeurs de clés d'URI https suivants. Vous pouvez utiliser l'une de ces options de chargeur de clés d'URI.
    • httpsjwks-Les propriétés suivantes doivent être configurées dans le fichier customer_overrides.properties pour utiliser le chargeur de clés httpsjwks:
      • yfs.yfs.jwt.verify.keyloader=httpsjwks

        Le chargeur de clés spécifique à l'émetteur peut être configuré comme suit: yfs.yfs.jwt.issuer name.verify.keyloader=httpsjwks

      • yfs.yfs.jwt.verify.keyloader.httpsuri=URI to get the key in JWKS format

        Le chargeur de clés spécifique à l'émetteur peut être configuré comme suit: yfs.yfs.jwt.issuer name.verify.keyloader.httpsuri=URI to get the key in JWKS format

    • httpsjwk-Les propriétés suivantes doivent être configurées dans le fichier customer_overrides.properties pour utiliser le chargeur de clés httpsjwk:
      • yfs.yfs.jwt.verify.keyloader=httpsjwk

        Le chargeur de clés spécifique à l'émetteur peut être configuré comme suit: yfs.yfs.jwt.issuer name.verify.keyloader=httpsjwk

      • yfs.yfs.jwt.verify.keyloader.httpsuri=URI to get the key in JWK format

        Le chargeur de clés spécifique à l'émetteur peut être configuré comme suit: yfs.yfs.jwt.issuer name.verify.keyloader.httpsuri=URI to get the key in JWK format

    • httpsbase64 -Les propriétés suivantes doivent être configurées dans le fichier customer_overrides.properties pour utiliser le chargeur de clés httpsbase64 :
      • yfs.yfs.jwt.verify.keyloader=httpsbase64

        Le chargeur de clés spécifique à l'émetteur peut être configuré comme suit: yfs.yfs.jwt.issuer name.verify.keyloader=httpsbase64

      • yfs.yfs.jwt.verify.keyloader.httpsuri=URI to get the key in Base64 encoded format

        Le chargeur de clés spécifique à l'émetteur peut être configuré comme suit: yfs.yfs.jwt.issuer name.verify.keyloader.httpsuri=URI to get the key in Base64 encoded format

    Chargeur de clés personnalisé Il permet de charger la clé de vérification à partir d'un coffre ou d'un stockage personnalisé. L'implémentation personnalisée doit mettre en œuvre l'interface IPLTJWTVerificationKeyLoader. Cette interface fournit une méthode pour redonner une clé. Cette clé est utilisée pour vérifier la signature de JWS. Si nécessaire, vous pouvez configurer un chargeur de clés personnalisé distinct pour chaque émetteur. La propriété suivante doit être configurée dans le fichier customer_overrides.properties pour utiliser un chargeur de clés personnalisé:
    yfs.yfs.jwt.verify.keyloader=class name implementing IPLTJWTVerificationKeyLoader interface

    Le chargeur de clés spécifique à l'émetteur peut être configuré comme suit: yfs.yfs.jwt.<issuer name>.verify.keyloader=class name implementing IPLTJWTVerificationKeyLoader interface

    Remarque: Si vous utilisez un fournisseur tiers pour votre jeton JWT, vous pouvez utiliser la configuration httpsjwks keyloader pour l'authentification JWT. Si le fournisseur ne prend pas en charge un noeud final JWKS (JSON Web Key Set), vous pouvez utiliser les autres options répertoriées dans le tableau Tableau 1 .
  3. Identifiez l'utilisateur OMS à partir des réclamations de contenu JWT entrantes. Les détails de l'utilisateur OMS peuvent être fournis en configurant l'une des propriétés suivantes dans le fichier customer_overrides.properties :
    • Chemin d'accès utilisateur OMS - yfs.yfs.jwt.defclaimparser.user.path=<path relative to the JWT body JSON to read the user>

      Le chemin d'accès utilisateur OMS spécifique à l'émetteur peut être configuré comme suit: yfs.yfs.jwt.issuer name.defclaimparser.user.path=path relative to the JWT body JSON to read the user

    • Chemin d'accès à l'adresse électronique de l'utilisateur OMS - yfs.yfs.jwt.defclaimparser.user.email.path=path relative to the JWT body JSON to read the user email

      Le chemin d'accès à l'adresse électronique de l'utilisateur OMS spécifique à l'émetteur peut être configuré comme suit: yfs.yfs.jwt.issuer name.defclaimparser.user.email.path=path relative to the JWT body json to read the user email

    Exemple

    Si le contenu JWT possède la structure JSON suivante:
    {
      "iat": 1516239022,
      "exp": 1531762065,
      "userid" : "testuser",
      "otherinfo" : { "email": "test@foo.com", "usergroup":"testGroup"}
    }
    Ensuite, pour spécifier le chemin d'accès de l'utilisateur, définissez la propriété sur:
    yfs.yfs.jwt.defclaimparser.user.path=userid
    Pour spécifier le chemin d'accès à l'adresse électronique de l'utilisateur, définissez la propriété sur:
    yfs.yfs.jwt.defclaimparser.user.email.path=otherinfo.email

    En d'autres termes, ici, le point (.) dans le chemin est utilisé pour accéder à un objet enfant dans la structure JSON, pour indiquer que l'objet email est enfant de l'objet otherinfo.

    Remarque: Si les valeurs de <path relative to the JWT body JSON to read the user> ou <path relative to the JWT body JSON to read the user email> contiennent un point (.), vous devez définir la propriété yfs.yfs.jwt.defclaimparser.path.delim de sorte qu'elle utilise un délimiteur autre que le point (.). En effet, le point est un caractère spécial utilisé comme délimiteur par défaut.
    yfs.yfs.jwt.defclaimparser.path.delim=<value>

    value est un caractère qui n'est pas présent dans path relative to the JWT body JSON to read the user ou path relative to the JWT body JSON to read the user email.

    Lorsque les chemins contiennent des points (.), vous pouvez utiliser la propriété yfs.yfs.jwt.defclaimparser.path.delim pour définir un autre délimiteur afin de spécifier le chemin.

    Par exemple, si le contenu du jeton Web JSON (JWT) possède la structure JSON suivante, où le chemin d'utilisateur et le chemin d'e-mail de l'utilisateur comportent le caractère point:
    {
      "iat": 1516239022,
      "exp": 1531762065,
      "www.foo.com/userid" : "testuser",
      "www.foo.com/otherinfo" : { "email": "test@foo.com", "usergroup":"testGroup"}
    }
    Ensuite, pour modifier le délimiteur, définissez la propriété suivante:
    yfs.yfs.jwt.defclaimparser.path.delim=$
    Etant donné que $ n'est pas présent dans le chemin, il peut être utilisé comme délimiteur alternatif.
    Désormais, le chemin de l'utilisateur et le chemin de l'adresse électronique de l'utilisateur peuvent être spécifiés comme suit:
    yfs.yfs.jwt.defclaimparser.user.path=www.foo.com/userid
    yfs.yfs.jwt.defclaimparser.user.email.path=www.foo.com/otherinfo$email

    Ici, $ dans le chemin indique que l'objet email est enfant de l'objet www.foo.com/otherinfo.