web-dev-qa-db-fra.com

Comment créer un mappeur de script dans Keycloak?

J'ai besoin de créer un mappeur de protocole de type mappeur de script dans Keycloak. Le script doit obtenir un attribut utilisateur, vérifier sa taille et le mettre sur le jeton. Je n'ai trouvé aucune documentation ni aucun exemple de création d'un script. D'après les morceaux que j'ai pu rassembler, je suppose que le script devrait ressembler à quelque chose comme:

var value = user.getAttribute("myAttribute");
if (value.length > LIMIT) {
    value = value.substring(0,LIMIT);
}
token.setOtherClaims("myAttribute",value);
  • Est-ce correct? J'ai composé user.getAttribute ("myAttribute"). Existe-t-il une source de documentation où je peux trouver comment obtenir un attribut utilisateur Keycloak?
  • le script doit-il renvoyer quelque chose? Toute aide serait surtout la bienvenue.
9
Jacobs2000

La magie des Script Mappers peut être comprise en regardant les sources de keycloak ici: Source

Le script peut retourner quelque chose en utilisant la variable exports comme celle-ci

exports = "Claim Value"

Les différents types:

Voici un exemple de script:

// you can set standard fields in token
token.setAcr("test value");

// you can set claims in the token
token.getOtherClaims().put("claimName", "claim value");

// work with variables and return multivalued token value
var ArrayList = Java.type("Java.util.ArrayList");
var roles = new ArrayList();
var client = keycloakSession.getContext().getClient();
var forEach = Array.prototype.forEach;
forEach.call(user.getClientRoleMappings(client).toArray(), function(roleModel) {
  roles.add(roleModel.getName());
});

exports = roles;

J'espère que ça aide!

18
André B.