Kong и JWT — как API должны извлекать информацию из токена

сегодня я начал смотреть на Kong и на то, как он предоставляет некоторые функции через плагины. Я читал страницу [введите описание ссылки здесь][Плагины] и начал изучать JWT.

Кажется, Kong предлагает эти конечные точки (и не только):

  • Создать потребителя;
  • Создать/удалить учетные данные JWT;
  • Создайте токен JWT с учетными данными, полученными на шаге 2;

После активации Kong проверит действительность JWT (и утверждений) и перенаправит в конечную точку API запрос, если он действителен.

Вот мои вопросы:

  1. Поскольку JWT также используется для переноса информации (например, идентификатора клиента, роли клиента), чтобы всегда иметь подмножество информации о пользователе в каждом API без запроса каждый раз к БД или другим конечным точкам, как каждый API может анализировать токен JWT и извлекать информация в нем?

  2. Представьте, что я хочу создать одностраничное приложение, взаимодействующее с Kong, которое скрывает множество микросервисов. Как лучше всего использовать JWT, чтобы каждая серверная микрослужба могла анализировать токен JWT, чтобы получить, например, идентификатор пользователя, сделавшего запрос?

  3. Предлагает ли Kong API для анализа токена JWT?


person Momo    schedule 13.05.2017    source источник


Ответы (5)


  1. Вы можете либо использовать библиотеку JWT, такую ​​как JJWT, например, для декодирования токена в реализации конечной точки API, либо вы можете использовать выделенный микросервис, который будет декодировать его для вас.

  2. Вы должны сгенерировать и получить доступ к токену при аутентификации пользователя, а затем отправить его в заголовке каждого запроса после этого. Таким образом, ваши микросервисы могут проверить пользователя с помощью одного из вариантов, описанных в № 1.

  3. Не похоже, что это делает

person clonq    schedule 14.05.2017

Пожалуйста, проверьте следующую ссылку, плагин проанализирует ваш токен JWT и расшифрует его: https://scaleout.ninja/post/kong-meets-auth0/

Также, если вам нужна помощь в настройке подключаемого модуля jwt, проверьте: Kong-auth0-jwt

person Florin Marin    schedule 30.05.2018

Другой вариант — использовать kong-oidc и развернуть его в качестве сервера ресурсов, проверив OAuth 2.0. JWT-токены.

person Hans Z.    schedule 30.05.2018

У меня было подобное требование. Я добился этого, добавив JwtFilter в свое приложение с весенней загрузкой, которое извлечет токен JWT, проанализирует его и установит в SecurityContextHolder. Я мог бы извлечь информацию о пользователе, извлекая токен из SecurityContextHolder везде, где это необходимо. Однако проблема, с которой я столкнулся, заключалась в том, чтобы идентифицировать secret, который использовался при регистрации JWT, поскольку я не мог контролировать, как он генерируется на стороне потребителя.

person Kunal_Hire    schedule 30.08.2018

На самом деле, как только Kong проверит токен JWT, связанный с потребителем, он поместит дополнительную информацию в заголовки запроса, например x-consumer-custom-id, x=consumer-username, x-consumer-groups и т. д.

Если вы хотите добавить запись о потребителе для каждого пользователя, имеющегося в вашей базе данных, свяжите пользовательский идентификатор вашего потребителя с реальным идентификатором пользователя в вашей базе данных.

Тогда для каждого запроса вы сможете определить, кто был эмитентом.

Если вам нужна дополнительная информация и вы все еще хотите использовать подключаемый модуль JWT, вам придется использовать дополнительные компоненты (библиотека JWT, сторонняя служба и т. д.).

person Julien    schedule 26.12.2019