Если Spring Security сконфигурирован для входа в OAuth 2.0, OAuth2LoginAuthenticationFilter
использует HttpSessionOAuth2AuthorizedClientRepository
(по умолчанию) для сохранения аутентифицированного пользователя в сеансе.Хотя объект Authentication
(OAuth2AuthenticationToken
), к сожалению, не имеет необработанного токена, вы должны иметь возможность извлечь его из клиента, который был сохранен в сеансе:
String attributeName = HttpSessionOAuth2AuthorizedClientRepository.class.getName()
+ ".AUTHORIZED_CLIENTS";
Map<String, OAuth2AuthorizedClient> authorizedClients = request.getSession()
.getAttribute(attributeName);
OAuth2AuthorizedClient client = authorizedClients.get("google");
String token = client.getAccessToken().getTokenValue();
Хотя это должно работать,это очень хрупко.Надеемся, что есть еще одно решение, которое не включает замену пользовательских реализаций в инфраструктуру безопасности.