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);
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!