Spring REST api OAuth2 验证来自外部授权服务器的令牌

Spring REST api OAuth2 validating token from external authorization server

我正在尝试实现我的 REST api,它是移动应用程序在我的 OAuth2 流程中使用的资源服务器。我有一个由其他人制作的外部授权服务器。目前我已经实现了在移动应用程序中获取访问令牌(我假设是 OAuth2 流程中的客户端?)现在当我从客户端调用资源服务器时(REST api)我需要资源服务器来在完成对客户端的请求之前,验证来自授权服务器的令牌。我尝试查找各种​​ Spring-security-OAuth2 教程,并且设法进行了一些。这是我目前的想法:

@Configuration
@EnableResourceServer
public class SecurityConfig extends ResourceServerConfigurerAdapter  {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
         .antMatchers("/**").authenticated();
    }

    @Primary
    @Bean
    public RemoteTokenServices tokenService() {
        RemoteTokenServices tokenService = new RemoteTokenServices();
        tokenService.setCheckTokenEndpointUrl(
          end_point_url);
        return tokenService;
    }

}

目前,授权服务器 end_point_url returns 仅在 http 200 在请求 header 中作为 Authorization: Bearer VALID_TOKEN 给出有效令牌时。现在我在 REST api 中的路径是 "secured" 但它所需要的只是传递 header Authorization: Bearer 并且在向我的 REST api 并将其视为已通过身份验证。我显然错过了或不明白的东西。我认为它根本没有从授权服务器验证令牌,或者..?老实说,我不知道..我需要做什么有什么想法吗?

更新:

正如我在下面评论的那样,我一直在关注我的外部授权服务器日志以及我的 spring 其余应用程序日志。我发现使用我在此处介绍的配置,spring 应用程序不是 extracting/using 来自客户端(移动应用程序)的授权令牌 Authorization: Bearer VALID_TOKEN 而是它使用 header 调用授权服务器,例如 Authorization: Basic SOME_RANDOM_TOKEN。为什么它忽略并且不使用来自移动应用程序(客户端)的带有 Bearer 标签的令牌?

好吧,我找到了一种方法来完全满足我的需要。我不完全确定这是正确的方法,但它完全符合我的要求。所以基本上我没有使用 RemoteTokenServices,而是像这样使用 UserInfoTokenServices

@Override
public void configure(final HttpSecurity http) throws Exception {
    http.csrf().disable();
    http.authorizeRequests().anyRequest().authenticated();
}

@Primary
@Bean
public UserInfoTokenServices tokenService() {
    final UserInfoTokenServices tokenService = new UserInfoTokenServices(USER_INFO_ENDPOINT, "");
    return tokenService;
}

通过将我以前的配置替换为上面的示例,我的 API 现在会在对 API 的每个请求中向我的授权服务器发出请求,以使用给定的访问令牌获取用户信息。如果它收到用户信息,我们就是 gucci,否则我们就是未经授权的。希望这对某人有所帮助!