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

时间:2019-05-22 10:52:38

标签: java spring-boot spring-security-oauth2

我正在尝试实现我的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在请求标头中以http 200的形式给出有效令牌时,仅返回Authorization: Bearer VALID_TOKEN。现在,我在REST api中的路径是“安全的”,但是在向我的REST api发出请求时,只需传递标头Authorization: Bearer且不传递任何令牌,也不会传递任何令牌,它将其视为已认证。我显然已经错过或不了解某些东西。我认为它根本不验证来自授权服务器的令牌。我真的不知道。关于我需要做什么的任何想法?

更新:

正如我在下面评论的那样,我一直在关注我的外部授权服务器日志以及我的spring rest应用程序日志。我发现,在这里介绍的这种配置下,spring应用程序未提取/使用来自客户端(移动应用程序)的授权令牌作为Authorization: Bearer VALID_TOKEN,而是调用了授权标头为Authorization: Basic SOME_RANDOM_TOKEN的服务器。为什么它会忽略而不使用移动应用程序(客户端)中带有Bearer标签的令牌?

1 个答案:

答案 0 :(得分:0)

好的,所以我找到了一种完全可以满足我需要的方法。我不完全确定这是正确的方法,但它确实可以实现我想要的功能。因此,基本上我没有像这样使用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,否则我们是未经授权的。希望这对某人有帮助!

相关问题