В моем приложении у меня есть отдельные микросервисы для аутентификации пользователя и информации о профиле пользователя. Служба аутентификации пользователей использует Spring Security OAuth2/JWT. После успешного входа пользователя в систему выдается токен JWT с уникальным идентификатором пользователя.
Мой вопрос заключается в том, как другие службы должны получать информацию о профиле пользователя. Должен ли я поместить эту информацию (например, имя, фамилию и т. д.) в токен JWT или мне следует создать API в службе профилей пользователей, который извлекает информацию о профиле пользователя после извлечения токена?
Буду признателен за любые советы по передовой практике.





До сих пор большинство подходов, которые я видел, заключались в том, чтобы хранить только логин пользователя в токене JWT и иметь другую службу, которая предоставляет вам другую необходимую информацию при входе в систему, и это кажется мне лучшим подходом (в случае любой утечки безопасности логин является единственным то, что можно украсть, а не имя или фамилию пользователя).
Я думаю, важно подчеркнуть, что OAuth2 предназначен для использования в качестве протокола авторизация, а не аутентификация.
OpenID Connect решает эту проблему, разделяя идентификатор (ID_Token) и авторизацию (токен доступа) на два разных токена, которые приложение может использовать. Вместо того, чтобы внедрять свои собственные, могу ли я предложить вам рассмотреть OpenID Connect?
У меня были подобные обсуждения с моей командой во время работы над микрослужбой аутентификации. Хотя важно понимать, что JWT — это кодировка, а не шифрование, поэтому всегда рекомендуется не хранить конфиденциальные данные в JWT. Хотя элементы, которые мы решили оставить в JWT, также должны зависеть от постановки задачи, которую мы решаем. Могут быть случаи использования, когда сохранение имени пользователя или идентификатора электронной почты не является конфиденциальной информацией, и вы можете сохранить это в JWT, чтобы избежать дополнительного вызова API.
Спасибо, Камиль, я думаю, что маршрут API — это то, что нужно. Это еще один запрос после получения токена, но он дает преимущество в предоставлении полного профиля пользователя без необходимости извлекать конфиденциальные данные, которые вы, возможно, не захотите помещать в токен JWT.