[16.0.0.4 et ultérieur]

Génération de jetons Web JSON dans Liberty

Vous pouvez générer des jetons Web JSON (JWT) à l'aide d'un programme en configurant l'élément de générateur JWT dans la configuration du serveur et en implémentant les API com.ibm.websphere.security.jwt.JwtBuilder et com.ibm.websphere.security.jwt.JwtToken dans vos applications.

Pourquoi et quand exécuter cette tâche

Pour obtenir des informations sur les API JWT, veuillez vous reporter à la documentation sur les jetons Web JSON Java ou à la documentation d'API fournie dans le produit dans le répertoire ${wlp.install.dir}/dev.

Procédure

  1. Dans le fichier server.xml, ajoutez la fonction jwt-1.0.
    <featureManager>
        <feature>jwt-1.0</feature>
        ...
    </featureManager>
  2. Configurez le générateur JWT en modifiant l'élément jwtBuilder.

    Pour obtenir des informations sur les attributs jwtBuilder que vous pouvez configurer, voir Générateur JWT (jwtBuilder).

    Lorsque vous ajoutez la fonction jwt-1.0 et enregistrez vos modifications, Liberty ajoute l'élément jwtBuilder par défaut suivant.
    <jwtBuilder id="defaultJWT">
    </jwtBuilder>
    Dans cette configuration par défaut, les valeurs suivantes sont implicites :
    • La revendication exp est de 2 heures après l'heure de création du jeton. Vous pouvez configurer cette valeur sur l'attribut expiry.
    • La revendication iss est définie sur https://<host_name>:<ssl_port>/jwt/defaultJWT. Configurez l'émetteur sur l'attribut issuer.
    • Le JWT est signé à l'aide de l'algorithme RS256 avec une clé privée dans le magasin de clés par défaut du serveur. Cette configuration suppose qu'un magasin de clés par défaut est configuré pour le serveur, que le magasin de clés par défaut contient une clé privé unique et que la clé privée peut être utilisée pour signer. Si vous spécifiez un magasin de clés différent sur l'attribut keyStoreRef, la clé privée du magasin de clés spécifié est utilisée. Si l'attribut keyAlias n'est pas configuré et le magasin de clés contient une seule clé privée, cette clé privée est utilisée dans la signature.

    Vous pouvez reconfigurer cet élément jwtBuilder par défaut ou créer un ou plusieurs autres éléments jwtBuilder. Chaque élément jwtBuilder doit avoir une chaîne à URL sécurisée unique spécifiée comme attribut id. Si l'ID est manquant, l'élément jwtBuilder n'est pas traité.

    Si le jeton JWT est signé à l'aide de l'algorithme RS256, vous pouvez configurer le générateur JWT pour signer le jeton JWT avec la clé Web JSON (JWK) en définissant jwkEnabled="true". Lorsque la clé JWK est activée, le générateur JWT génère dynamiquement des paires de clés et signe le jeton JWT avec la clé privée. Pour valider la signature, le consommateur JWT peut extraire la clé de l'API JWK, qui a le format suivant :
    https://<host_name>:<ssl_port>/jwt/ibm/api/<jwtBuilder_configuration_id>/jwk
  3. Générez des jetons JWT par programmation en implémentant les API com.ibm.websphere.security.jwt.JwtBuilder et com.ibm.websphere.security.jwt.JwtToken dans votre application.

    Pour plus d'informations, veuillez vous reporter à la documentation sur les jetons Web JSON Java.

    1. Créez un objet JwtBuilder.
      Si vous ne spécifiez pas un ID de configuration, l'objet est lié à la configuration de l'élément jwtBuilder par défaut.
      com.ibm.websphere.security.jwt.JwtBuilder jwtBuilder = JwtBuilder.create();
      Si vous spécifiez un ID de configuration, l'objet est lié à la configuration de l'élément jwtBuilder avec l'ID spécifié.
      com.ibm.websphere.security.jwt.JwtBuilder jwtBuilder = JwtBuilder.create("jwtBuilder_configuration_id");
    2. Modifiez les revendications dans le jeton.
      • Ajouter ou mettre à jour une revendication : jwtBuilder.claim("claim_name", "claim_value");
        jwtBuilder.claim("role", "monitor");
      • Supprimer une revendication : jwtBuilder.remove("claim_name");
        jwtBuilder.remove("role");
      • Extraire une revendication du registre d'utilisateur fédéré de Liberty : jwtBuilder.fetch("attribute_name");

        Cet appel d'extraction indique à l'objet JwtBuilder de rechercher le nom d'utilisateur identifié par la revendication sub du JWT dans le registre d'utilisateur fédéré. L'objet JwtBuilder extrait la valeur de l'attribut spécifié et crée une nouvelle revendication sur la base de cet attribut. Le nom de la nouvelle revendication est définie sur le nom d'attribut et la valeur de la nouvelle revendication est définie sur la valeur d'attribut.

      • Copiez une revendication à partir d'un objet JSON ou JWT existant : jwtBuilder.claimFrom(JSON_ou_JWT, "nom_revendication");
    3. Modifiez l'algorithme de signature et la clé de signature configurés.
      jwtBuilder.signWith("new_algorithm", new_key);
    4. Générez le jeton à l'aide de l'API com.ibm.websphere.security.jwt.JwtToken.
      JwtToken jwtToken = jwtBuilder.buildJwt();
      String jwtTokenString = jwtToken.compact();

Exemples d'API Jeton Web JSON

L'exemple suivant crée un nouveau JWT.
JwtBuilder jwtBuilder = JwtBuilder.create();
jwtBuilder.subject("tom@op.com").claim(Claims.AUDIENCE, "https://acme.com/rs").claim("iss","https://sso.com/ibm/op" ).claim("scope", "impersonator monitor").claim("uid", "hasys123haksiqws");
JwtToken goToken = jwtBuilder.buildJwt();
Le JWT obtenu est signé avec la clé privée par défaut du serveur et contient les revendications suivantes.
{
"aud": "https://acme.com/rs",
"iss": "https://sso.com/ibm/op",
"iat": 1388440863, "exp": 1388444763,
"uid": "hasys123haksiqws",
"sub": "tom@op.com",
"scope": "impersonator monitor"
}
L'exemple suivant génère le JWT newToken à partir d'un autre JWT, goToken.
JwtToken newToken = JwtBuilder.create().claim(Claims.AUDIENCE, "https://acme.com/rs").claimFrom(goToken, "sub").claim(goToken, "uid").claim(goToken, "scope").buildJwt();

Icône indiquant le type de rubrique Rubrique Tâche



Icône d'horodatage Dernière mise à jour: Tuesday, 6 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twlp_sec_build_jwt
Nom du fichier : twlp_sec_build_jwt.html