2014-11-05 71 views
8

我试图设置一个资源服务器使用弹簧安全oauth使用单独的授权服务器。我正在使用RemoteTokenServices,这需要/check_token端点。春季安全OAuth2 check_token终点

我可以看到/oauth/check_token当使用@EnableAuthorizationServer时,默认启用端点。但是,端点默认情况下不可访问。

是否应手动添加以下条目以将此端点列入白名单?

http.authorizeRequests().antMatchers("/oauth/check_token").permitAll(); 

这将使所有人都可以访问此端点,这是所需的行为吗?或者我错过了什么。

由于提前,

回答

13

你必须

@Override 
public void configure(AuthorizationServerSecurityConfigurer oauthServer) throws Exception 
{ 
    oauthServer.checkTokenAccess("permitAll()");  
} 

欲了解更多有关这::

How to use RemoteTokenService?

+3

不会 “isAuthenticated()” 比 “permitAll()” 更好? – 2014-11-07 07:43:34

+0

我写了这个,因为他试图在上面的代码中实现这一点。 – 2014-11-07 08:46:15

0

首先,配置访问令牌表达:

@Override 
public void configure(AuthorizationServerSecurityConfigurer securityConfigurer) throws Exception { 
    securityConfigurer 
      .allowFormAuthenticationForClients() 
      .checkTokenAccess("isAuthenticated()") 
      .addTokenEndpointAuthenticationFilter(checkTokenEndpointFilter()); 
} 

然后,我们需要定义一个过滤器来处理客户端身份验证:

@Bean 
public ClientCredentialsTokenEndpointFilter checkTokenEndpointFilter() { 
    ClientCredentialsTokenEndpointFilter filter = new ClientCredentialsTokenEndpointFilter("/oauth/check_token"); 
    filter.setAuthenticationManager(authenticationManager); 
    filter.setAllowOnlyPost(true); 
    return filter; 
}