xen*_*ide 5 spring-security oauth-2.0 google-oauth spring-boot
上下文:我正在尝试使用 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
Run Code Online (Sandbox Code Playgroud)
所以我用 Spring Boot 2.1.6 设置了 google 登录,如下(它有效)
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
Run Code Online (Sandbox Code Playgroud)
根据google google docs,我应该在 spring 发出请求期间取回访问/授权令牌。如何检索此令牌以便我可以进一步调用 API,例如 youtube?
来自@jgrandja https://github.com/spring-projects/spring-security/issues/7088#issuecomment-511820737
不,它不会被消灭。您可以
OAuth2AuthorizedClient通过OAuth2AuthorizedClientRepository或检索OAuth2AuthorizedClientService。在OAuth2AuthorizedClient包含OAuth2AccessToken和可选OAuth2RefreshToken。有关更多信息,请参阅参考文档。
此外,更方便的获取方式
OAuth2AuthorizedClient是通过@RegisteredOAuth2AuthorizedClient。
我鼓励您阅读参考文档,因为那里有很多信息可能会回答您的问题。
如果 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();
Run Code Online (Sandbox Code Playgroud)
虽然这应该可行,但它非常脆弱。希望有另一种解决方案不涉及将自定义实现交换到安全框架中。
| 归档时间: |
|
| 查看次数: |
4298 次 |
| 最近记录: |