Keycloak - токены Introspect для разных сфер с использованием master - PullRequest
1 голос
/ 21 февраля 2020

Мы создаем приложение, в котором несколько клиентов могут зарегистрироваться и иметь собственные базы пользователей. Например, клиент «CompanyA» может зарегистрироваться, а затем разрешить своим пользователям доступ к нашей системе с их собственными именами пользователей (некоторые из LDAP). «CompanyB» также может делать то же самое, имена пользователей будут уникальными для одного клиента, но могут дублироваться для разных клиентов.

Для этого мы используем keycloak и использовали концепцию областей для достижения этой цели. Когда новый клиент регистрируется, мы создаем для него новую область и выполняем необходимые настройки. Это работает, как и ожидалось, но у нас есть проблемы с нашим промежуточным программным обеспечением.

Наше промежуточное программное обеспечение - это Kong, который имеет плагин OID C, который мы интегрируем с keycloak, однако плагину требуется имя области, которое в нашем случае на самом деле будет динамическим c.

Например: когда пользователь входит в наш пользовательский интерфейс, он получает токен из области своего клиента. Теперь, когда пользователь запрашивает ресурс у нашего бэкэнда, этот запрос будет go через конг.

Kong будет анализировать этот токен, используя настроенный клиент и область, однако его нельзя выбрать динамически, поэтому в идеале я хотел бы иметь настроенный клиент в главной области для каждой области клиента и использовать этот клиент magi c проанализировать их токены.

Что-то вроде этого возможно? Если нет, то на какие другие пути я могу посмотреть?

1 Ответ

1 голос
/ 21 февраля 2020

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

Если вы расшифруете токен JWT что-то вроде https://jwt.io/, вы увидите свойство токена, называемое эмитентом. Это URL области, которая создала токен.

Итак, чтобы получить область, вы делаете что-то вроде этого:

import org.keycloak.TokenVerifier;
import org.keycloak.representations.AccessToken;
...

    AccessToken token = (AccessToken)TokenVerifier.create(tokenString, 
    AccessToken.class).parse().getToken();
    String realm = token.getIssuer().substring(token.getIssuer().lastIndexOf(47) + 1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...