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