Могу ли я получить токен доступа из Spring Security Oauth? - PullRequest
0 голосов
/ 02 июля 2019

контекст: я пытаюсь играть с плейлистами Google, просто перечислите их сейчас

curl \
  'https://www.googleapis.com/youtube/v3/playlists?part=snippet%2CcontentDetails&maxResults=25&mine=true&key=[YOUR_API_KEY]' \
  --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' \
  --header 'Accept: application/json' \
  --compressed

Итак, я настроил логин Google с Spring Boot 2.1.6 следующим образом (работает)

spring.security.oauth2.client.registration.google.client-id=...
spring.security.oauth2.client.registration.google.client-secret=...
spring.security.oauth2.client.registration.google.redirect-uri=http://localhost:8080/login/oauth2/code/google
spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token
spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/v2/auth
spring.security.oauth2.client.provider.google.user-info-uri=https://openidconnect.googleapis.com/v1/userinfo
spring.security.oauth2.client.provider.google.jwk-set-uri=https://www.googleapis.com/oauth2/v3/certs
spring.security.oauth2.client.provider.google.issuer-uri=https://accounts.google.com
spring.security.oauth2.client.registration.google.scope=profile,https://www.googleapis.com/auth/youtube

согласно google google docs Я должен получить токен доступа / авторизации обратно во время запросов, которые пришла весной. Как я могу получить этот токен, чтобы я мог совершать дальнейшие вызовы таких API, как youtube?

1 Ответ

0 голосов
/ 02 июля 2019

Если 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();

Хотя это должно работать,это очень хрупко.Надеемся, что есть еще одно решение, которое не включает замену пользовательских реализаций в инфраструктуру безопасности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...