【发布时间】:2020-01-27 14:37:18
【问题描述】:
我正在尝试通过向我的 spring-boot 后端提供一个我从 Google 获得的访问令牌来验证 API 调用。
根据我对文档的理解,只需声明就足够了
security.oauth2.resource.jwk.key-set-uri=https://www.googleapis.com/oauth2/v3/certs
在application.properties 文件中,同时启用资源服务器和网络安全。
令牌正在表单的标题中发送
'Authorization': 'Bearer ya29.ImCQBz5-600zVNsB[...]ka-x5kC[...]hvw-BGf3m5Bck-HF[...]44'
当我尝试进行身份验证时,我收到 401 Unauthorized 错误,并出现以下控制台错误:
OAuth2AuthenticationProcessingFilter: Authentication request failed: error="invalid_token", error_description="An I/O error occurred while reading the JWT: Invalid UTF-8 start byte 0xad at [Source: (byte[])"??"; line: 1, column: 3]
我希望使用 spring 安全库的大部分功能,但我尝试编写自己的简单 bean 来进行令牌管理。
@Configuration
@EnableResourceServer
@EnableWebSecurity
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().hasRole("USER");
}
@Bean
public TokenStore tokenStore() {
return new jwkTokenStore("https://www.googleapis.com/oauth2/v3/certs");
}
@Bean
@Primary
public DefaultTokenServices tokenServices() {
DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
defaultTokenServices.setTokenStore(tokenStore());
return defaultTokenServices;
}
@Override
public void configure(ResourceServerSecurityConfigurer config) {
config.tokenServices(tokenServices());
}
}
我希望验证令牌并能够显示信息。
我是否需要编写自己的函数来处理这个问题?
【问题讨论】:
-
您的问题解决了吗?我有一个类似的问题。我同时使用
security.oauth2.resource.jwk.key-set-uri和spring.security.oauth2.resourceserver.jwt.jwk-set-uri我遇到的问题是在配置上调用 jwk 的请求正在发送请求并且无法解析数据。 (没有“价值”道具)。 -
抱歉回复晚了。我能够在这篇博文之后解决它:blog.arnoldgalovics.com/…我最终继续沿着这条路走,但是因为我们正在研究类似于这样的内部解决方案:auth0.com/docs/quickstart/backend/java-spring-security5
标签: java spring-security-oauth2 openid-connect google-authentication