Keycloak récupérer les attributs personnalisés pour KeycloakPrincipal

dans mon service rest je peux obtenir les informations principales après authentification en utilisant

KeycloakPrincipal kcPrincipal = (KeycloakPrincipal) servletRequest.getUserPrincipal();

déclaration.

Keycloak principal ne fait pas cotain toutes les informations dont j'ai besoin à propos de l'utilisateur authentifié. Est-il possible de personnaliser mon propre type principal? Sur le keycloak-server-end, nous avons développé un fournisseur de Fédération d'utilisateurs. J'ai vu que UserModel permet d'ajouter un ensemble d'attributs personnalisés à mon utilisateur.

Est-il possible d'insérer mon personnalisée principal dans ce code?

est-il possible de récupérer ces attributs à partir de keycloak principal?

Quel est le chemin?

19
demandé sur Alex 2015-09-20 14:30:17

2 réponses

Pour ajouter des attributs personnalisés que vous devez faire trois choses:

  1. ajouter des attributs à la console d'administration
  2. ajouter la cartographie des claims
  3. demandes D'accès

Le premier est expliqué très bien ici: http://www.keycloak.org/docs/3.3/server_admin/topics/users/attributes.html

Ajouter un mappage de revendication:

  1. Ouvrir la console d'administration de votre domaine.
  2. aller aux Clients et ouvrez votre client
  3. cela ne fonctionne que pour les paramètres > Type D'accès confidentiel ou public (non porteur seulement)
  4. Aller à Mappeurs
  5. Créer un mappage à partir de votre attribut json
  6. cochez "Add to ID token"

demandes D'accès:

final Principal userPrincipal = httpRequest.getUserPrincipal();

if (userPrincipal instanceof KeycloakPrincipal) {

    KeycloakPrincipal<KeycloakSecurityContext> kp = (KeycloakPrincipal<KeycloakSecurityContext>) userPrincipal;
    IDToken token = kp.getKeycloakSecurityContext().getIdToken();

    Map<String, Object> otherClaims = token.getOtherClaims();

    if (otherClaims.containsKey("YOUR_CLAIM_KEY")) {
        yourClaim = String.valueOf(otherClaims.get("YOUR_CLAIM_KEY"));
    }
} else {
    throw new RuntimeException(...);
}

J'espère que cela vous aidera et vous conviendra. J'ai utilisé ce pour un attribut personnalisé, j'ai ajouté avec un thème personnalisé.

42
répondu lisa p. 2017-09-20 13:22:49
  • Sélectionnez Utilisateurs > recherche > cliquez sur ID > allez à l'onglet Attributs > Ajouter un attribut > par exemple: téléphone > Enregistrer enter image description here

  • sélectionnez Clients > cliquez sur L'ID du Client > allez à L'onglet Mappers > créer mapper

    enter image description here

    enter image description here

    enter image description here

  • Obtenir les attributs personnalisés

    enter image description here

    enter image description here

12
répondu Neeraj Benjwal 2017-12-06 23:03:34