In meinem Ruhe-Service kann ich die wichtigsten Informationen nach der Authentifizierung mit erhalten
KeycloakPrincipal kcPrincipal = (KeycloakPrincipal) servletRequest.getUserPrincipal();
aussage.
Keycloak Principal enthält nicht alle Informationen, die ich über den authentifizierten Benutzer benötige. Ist es möglich, meinen Haupttyp anzupassen? Auf der Keycloak-Server-Seite habe ich einen User Federation Provider entwickelt. Ich habe gesehen, dass UserModel es ermöglicht, meinem Benutzer eine Reihe von benutzerdefinierten Attributen hinzuzufügen.
Ist es möglich, mein benutzerdefiniertes Prinzipal in diesen Code einzufügen?
Ist es möglich, diese Attribute vom keycloak-Prinzipal abzurufen?
Wie ist der weg
Um benutzerdefinierte Attribute hinzuzufügen, müssen Sie drei Dinge tun:
Der erste wird hier ziemlich gut erklärt: https://www.keycloak.org/docs/latest/server_admin/index.html#user-attributes
Anspruchszuordnung hinzufügen:
Zugriffsansprüche:
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(...);
}
Ich hoffe, das hilft und passt zu Ihrem Anwendungsfall. Ich habe dies für ein benutzerdefiniertes Attribut verwendet, das ich mit einem benutzerdefinierten Thema hinzugefügt habe.
Wählen Sie Benutzer> Nachschlagen> klicken Sie auf ID> gehen Sie zur Registerkarte Attribute> Attribut hinzufügen> z. B .: Telefon> Speichern
Wählen Sie Clients aus, klicken Sie auf Client ID, gehen Sie zur Registerkarte Mappers und erstellen Sie einen Mapper
Benutzerdefinierte Attribute abrufen
AKTUALISIEREN
Fügen Sie das Attribut "Telefon" auf Gruppenebene hinzu, weisen Sie dieser Gruppe einen Benutzer zu, und Sie erhalten das Attribut "Telefon" auf Gruppenebene für alle Benutzer
Kehren Sie zu Mapper zurück und aktualisieren Sie 'phone' mit 'Aggregate attribute values = true' und 'Multivalued = true'. Sie erhalten 'phone' als Liste mit den Attributen von Gruppen- und Benutzerebene. Wenn Sie 'Aggregate attribute values = false' oder 'Multivalued = false' beibehalten, erhalten Sie nur einen Wert, bei dem das 'phone'-Attribut des Benutzers das' phone'-Attribut der Gruppe überschreibt (was sinnvoll ist).