上下文:我正在尝试使用Google播放列表,现在就列出它们
https://localhost:6523/api/OData/Entity/?
expand=CustomAttributes($select=id,customattributetypeId,value,entityid)
,Type($select=id,type,subtype)
&$filter=TypeId eq 74
and CustomAttributes/any(d: d/Value in
('ACFI','f6fe7a7e'))
and BIType/Id eq 74
所以我已经用Spring Boot 2.1.6设置了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 google docs,我应该在spring提出请求的过程中取回访问/授权令牌。如何获取此令牌,以便可以进一步调用API(例如youtube)?
答案 0 :(得分:5)
来自@jgrandja https://github.com/spring-projects/spring-security/issues/7088#issuecomment-511820737
不,它不会消失。您可以通过
OAuth2AuthorizedClient
或OAuth2AuthorizedClientRepository
检索OAuth2AuthorizedClientService
。OAuth2AuthorizedClient
包含OAuth2AccessToken
和可选的OAuth2RefreshToken
。 有关更多信息,请参见ref doc。
另外,通过@RegisteredOAuth2AuthorizedClient是获取
OAuth2AuthorizedClient
的更便捷方法。
我建议您阅读参考文档,因为那里有很多信息可能会回答您的问题。
答案 1 :(得分:-1)
如果为OAuth 2.0登录名配置了Spring Security,则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();
尽管这应该起作用,但它非常脆弱。希望有另一种解决方案,不涉及将自定义实现交换到安全框架中。