Получить пользовательский атрибут из JavaScript (используя Javascript Adapter) Keycloak - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть пользователь keycloak с пользовательскими атрибутами, как показано ниже. keycloak custom attribute

Я использую Reactjs для front-end. Я хочу получить пользовательский атрибут со стороны JavaScript. Как этот ответ гласит.

https://stackoverflow.com/a/32890003/2940265

Но я не могу найти, как это сделать на стороне JavaScript.

Я отлаживал в Chrome, но не могу найти подходящий результат для пользовательских атрибутов.

Пожалуйста, помогите

Ответы [ 2 ]

0 голосов
/ 21 мая 2019

Атрибуты можно получить через профиль пользователя:

keycloak = ... // Keycloak instance

keycloak.loadUserProfile().success(function(profile) {
    let companyId = profile.attributes.companyId[0];
    alert('Company Id: ' + companyId);
}).error(function() {
    alert('Failed to load user profile');
});

Каждый атрибут представляет собой массив строк. Поэтому, если у вас нет нескольких идентификаторов компании, массив будет иметь длину 1, а соответствующие данные находятся в элементе 0.

Помимо пользовательских атрибутов, в качестве части профиля пользователя доступны следующие элементы:

  • ID
  • имя пользователя
  • Адрес электронной почты
  • Имя
  • Фамилия
  • включено
  • emailVerified
  • TOTP
  • createdTimestamp
0 голосов
/ 12 ноября 2018

Я нашел ответ.

Я опубликую здесь, потому что кто-то может найти это полезным.

Что ж, вы можете добавить пользовательские атрибуты для пользователя, но вам нужны дополнительные конфигурации, чтобы получить его со стороны javascript. Для удобства начинающих я напишу ответ от «Добавление клиента» на получение атрибута из javascript (в моем случае реагирует на js).

Давайте добавим пользовательские атрибуты для пользователя.

Войдите в Keycloak и выберите свою область (если у вас есть несколько областей, если вы не будете автоматически входить в область)

После этого выберите Пользователи -> Просмотреть всех пользователей Выберите своего пользователя в моем случае это Алиса Выберите Атрибуты и добавьте настраиваемые атрибуты (в моем случае я добавил вызов настраиваемого атрибута companyId , как показано ниже)

enter image description here

Теперь нажмите Сохранить

Теперь мы должны сопоставить атрибут Custom с нашим клиентом keycloak. Чтобы клиент мог использовать keycloak, у вас должен быть клиент в Clients (левая боковая панель) Если у вас нет, вы должны настроить клиент для этого. В моем случае мой клиент test-app

Для этого выберите Клиенты -> test-app -> Mappers Теперь мы должны создать Mapper. Нажмите Создать

Для Token Claim Name вы должны дать свой ключ пользовательских атрибутов (в моем случае это companyId ) для моей простоты, я использую companyId для Name, префикс роли царства Имя токена . Вы должны выбрать Атрибут пользователя в Тип сопоставления и Строка для Заявка JSON Тип

После этого нажмите Сохранить. Теперь вы можете получить свой собственный атрибут из JavaScript.

скажем, ваш JavaScript-объект keycloak keycloak , вы можете получить companyId с помощью keycloak.

let companyId = keyCloak.idTokenParsed.companyId;

пример кода был бы как ниже (мой код вact.js)

keyCloak.init({
    onLoad: 'login-required'
}).success(authenticated => {
    if (authenticated) {
        if (hasIn(keyCloak.tokenParsed, 'realm_access')) {
            if (keyCloak.tokenParsed.realm_access.roles === []) {
                console.log("Error: No roles found in token")
            } else {
                let companyId = keyCloak.idTokenParsed.companyId;
            }
        } else {
            console.log("Error: Cannot parse token");
        }
    } else {
        console.log("Error: Authentication failed");
    }
}).error(e => {
    console.log("Error: " + e);
    console.log(keyCloak);
});

Надеюсь, кто-нибудь найдет этот ответ полезным, потому что я мог бы найти ответ для JavaScript. Удачного кодирования:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...