Используйте JWT для аутентификации отдельного API Microservice - PullRequest
1 голос
/ 15 мая 2019

Я занимаюсь разработкой приложения с использованием микросервисов в NodeJS.Я создал auth api, который обрабатывает обычную регистрационную регистрацию и т. Д., И выдает JWT

. Как использовать их для защиты маршрутов в отдельном микросервисе API, написанном с помощью Express?

Нужно ли использовать JWT с секретом для расшифровки токена в приложении API?

Ответы [ 2 ]

2 голосов
/ 15 мая 2019

Вы можете написать библиотеку, которую вы импортируете в другие ваши микросервисы, для которой требуются все маршруты по умолчанию, требующие аутентификации. Эта библиотека может иметь механизм для проверки JWT на уровне микросервиса, поэтому вам никогда не нужно обращаться к своему auth api, чтобы узнать, является ли JWT действительным или нет. Смотрите описание и схему ниже:

Ваш сервер аутентификации должен быть единственным поставщиком JWT для ваших микросервисов. Поэтому, когда пользователь входит в систему и успешно проходит аутентификацию, ваш сервер аутентификации выдаст JWT, подписанный с помощью закрытого ключа (подпись ДОЛЖНА быть асимметричной - пример RS256), который вы держите только на сервере аутентификации; не передавайте этот закрытый ключ другим микросервисам, для которых вы хотите проверить JWT внутри. Что вы можете сделать, это получить открытый ключ на основе закрытого ключа, которым вы подписываете свои токены, и опубликовать его в конечной точке на вашем сервере аутентификации, которая не требует аутентификации - открытый ключ будет представлен в виде JWK (см. Ссылку на спецификацию). Google делает нечто подобное здесь . Затем в каждом из ваших микросервисов вашей библиотеке потребуется разработать способ отправки GET-запроса к конечной точке открытого ключа на вашем сервере аутентификации каждые X минут, чтобы посмотреть, есть ли какие-либо изменения, и кэшировать открытый ключ в каждом микросервисе. Имея открытый ключ в вашем микросервисе, вы сможете проверить запрашивающий JWT внутри запрашиваемой службы.

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

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

enter image description here

1 голос
/ 15 мая 2019

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

В этом ответе для простоты упущено несколько вещей.Например, часто вы хотели бы иметь микросервис авторизации, который решает , что пользователь может делать.Кроме того, реализация JWT может быть вовлечена.Вам может понадобиться слой кэша для отслеживания JWT в белом и / или черном списках.

...