it-roy-ru.com

Keycloak: проверить токен доступа и получить идентификатор Keycloak

Мне нужно уметь делать следующее (с простой серверной средой cURL & JSON - без фреймворков или Java):

  1. Используйте строковое представление токена доступа Keycloak, который был мне предоставлен третьей стороной, чтобы убедиться, что токен действителен.

  2. Если токен действителен, получите идентификатор Keycloak для этого пользователя.

Как мне сделать это, используя старые старые сообщения HTTP? Я нашел много примеров Java, но мне нужно знать исходные HTTP POST и ответы внизу. 

Это что-то вроде этого для проверки токена?

/auth/realms/<realm>/protocols/openid-connect/validate?access_token=accesstokenhere

Что это возвращает с точки зрения данных (извините, в настоящее время у меня нет тестового сервера для опроса)? 

Благодарю.

6
lilalfyalien

Конечная точка проверки не работает сейчас. Используется для возврата токена доступа. Я использую Keycloak 2.5.1 сейчас. Как упоминалось в посте Матиаса (и в post на который он ссылается), пришлось использовать introspect token endpoint.

В моем тестировании Bearer аутентификация не работала. Пришлось использовать заголовок обычной аутентификации вместе с клиентскими учетными данными в кодировке base64.

base64.encode("<client_id:client_secret>".getBytes("utf-8"))

Ответ от конечной точки интроспекции находится в формате JSON, как и в посте, на который ссылается Maytas, и имеет много полей в зависимости от типа исследуемого токена. В моем случае token_type_hint было установлено как access_token.

requestParams = "token_type_hint=access_token&token=" + accessToken

Ответ включал необходимые данные пользователя, такие как имя пользователя, роли и доступ к ресурсам. Также включены обязательные атрибуты OAuth, такие как active, exp, iss и т.д. Подробности см. В rfc7662 # page-6.

3
mssuley

Может быть, вам нужно это: http://lists.jboss.org/pipermail/keycloak-user/2016-April/005869.html

Единственная проблема заключается в том, что самоанализ не работает с публичными клиентами.

URL-адрес ключа: "Http: // $ KC_SERVER/$ KC_CONTEXT/realms/$ REALM/protocol/openid-connect/token/introspect"

Вы должны авторизовать своего клиента, например, с базовой аутентификацией, и нужно дать токен-запросчик для самоанализа:

curl -u "client_id:client_secret" -d "token=access_token_to_introspect" "http://$KC_SERVER/$KC_CONTEXT/realms/$REALM/protocol/openid-connect/token/introspect"
2
Mátyás Bachorecz