Получение настраиваемого атрибута из JavaScript (с использованием адаптера Javascript) Keycloak

У меня есть пользователь keycloak с настраиваемыми атрибутами, как показано ниже. Получение настраиваемого атрибута из JavaScript (с использованием адаптера Javascript) Keycloak

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

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

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

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

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
7
0
4 435
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

Я размещу здесь, потому что кому-то это может пригодиться.

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

Добавим пользователю настраиваемые атрибуты.

войдите в keycloak и выберите свое царство (если у вас несколько миров, если вы не войдете в царство автоматически)

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

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

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

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

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

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

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

let companyId = keyCloak.idTokenParsed.companyId;

пример кода будет таким, как показано ниже (мой код в response.js)

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

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

подскажите, пожалуйста, как получить экземпляр keycloak? Это также доступно в версии 14.x.x или выше?

xbmono 27.08.2021 00:59

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

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.

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

  • я бы
  • имя пользователя
  • Эл. адрес
  • имя
  • фамилия
  • включено
  • emailVerified
  • Totp
  • createdTimestamp

Привет, кодо, есть ли средство сопоставления для атрибута, который должен возвращаться в значении вместо массива? Например, companyId вместо companyId [0]

cYee 02.11.2021 06:36

Если вы извлекаете атрибут через профиль, как показано в моем ответе, сопоставитель не задействуется. Так что это всегда массив. Вот какова модель данных Keycload. Но я не понимаю, почему это проблема. Если вы хотите получить атрибут по идентификатору или токену доступа, тогда необходим сопоставитель, который добавляет атрибут в качестве значения (вместо массива). Подробности см. В ответе Меноки Ишана.

Codo 02.11.2021 08:41

Это не проблема, просто у меня есть сопоставитель для токена, который возвращает значение, а администратор возвращает массив, что может сбивать с толку. еще спасибо за это.

cYee 02.11.2021 16:09

Привет, Кодо. Не возражаете, если я спрошу, знаете ли вы на это ответ? stackoverflow.com/questions/60300891/…

cYee 07.11.2021 17:14

Как вы думаете, как это связано с этим вопросом?

Codo 07.11.2021 23:31

Нет, это не ссылка, просто интересно, что у вас есть ответ на это.

cYee 08.11.2021 02:59

Другие вопросы по теме