Dans mon service de repos, je peux obtenir les informations principales après l'authentification en utilisant
KeycloakPrincipal kcPrincipal = (KeycloakPrincipal) servletRequest.getUserPrincipal();
déclaration.
Le principal de Keycloak ne contient pas toutes les informations dont j'ai besoin sur l'utilisateur authentifié. Est-il possible de personnaliser mon propre type principal? Du côté serveur-clé, j'ai 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 principal personnalisé dans ce code?
Est-il possible de récupérer ces attributs du principal de keycloak?
Quelle est la voie?
Pour ajouter des attributs personnalisés, vous devez faire trois choses:
Le premier est expliqué assez bien ici: https://www.keycloak.org/docs/latest/server_admin/index.html#user-attributes
Ajouter un mappage de revendications:
Revendications 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 aide et correspond à votre cas d'utilisation. Je l'ai utilisé pour un attribut personnalisé que j'ai ajouté avec un thème personnalisé.
Sélectionnez Utilisateurs> Recherche> cliquez sur ID> allez dans l'onglet attributs> Ajouter un attribut> par exemple: téléphone> Enregistrer
Sélectionnez Clients> cliquez sur ID client> allez dans l'onglet Mappeurs> créez un mappeur
Obtenez des attributs personnalisés
MISE À JOUR
Ajoutez l'attribut "téléphone" au niveau du groupe, affectez l'utilisateur à ce groupe et vous obtenez l'attribut "téléphone" du niveau du groupe pour tous les utilisateurs
Revenez au mappeur et mettez à jour 'phone' avec 'Aggregate attribute values = true' et 'Multivalued = true', et vous obtenez 'phone' en tant que liste avec les deux attributs au niveau du groupe et de l'utilisateur. Si vous conservez 'Aggregate attribute values = false' ou 'Multivalued = false', vous obtenez une seule valeur, où l'attribut 'phone' de l'utilisateur remplacera l'attribut 'phone' du groupe (ce qui a du sens)