0

在我们的应用程序中,我们希望锁定 check_token 端点,以便只有使用客户端凭据进行身份验证的客户端才能检查令牌的有效性。

文档指出,使用时默认启用表达式处理程序@EnableResourceServer,并且有一些关于如何使用 xml 设置表达式处理的说明。我需要做什么才能让 spring 使用 java config 评估下面的表达式?

@Configuration
@EnableAuthorizationServer
public class OAuth2AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {

    ...

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        security.checkTokenAccess("#oauth2.isClient()");
    }

    ...
}
4

1 回答 1

2

以下内容并不漂亮,但似乎有效。

@EnableGlobalAuthentication
@Configuration
//@EnableAuthorizationServer
@Import({OAuth2AuthorizationServerConfiguration.SecurityConfiguration.class, AuthorizationServerEndpointsConfiguration.class})
public class OAuth2AuthorizationServerConfiguration extends AuthorizationServerConfigurerAdapter {


    @Configuration
    public static class SecurityConfiguration extends AuthorizationServerSecurityConfiguration {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests().expressionHandler(new OAuth2WebSecurityExpressionHandler());
            super.configure(http);
        }
    }

AuthorizationServerSecurityConfiguration提供对HttpSecurity对象的访问,这是需要插入表达式处理程序的位置。

脚步:

  • 子类AuthorizationServerSecurityConfiguration并设置表达式处理程序
  • 删除@EnableAuthorizationServer注释(因为它也导入AuthorizationServerSecurityConfiguration
  • 导入新的子类AuthorizationServerSecurityConfiguration
  • 进口AuthorizationServerEndpointsConfiguration(它最初是由进口的@EnableAuthorizationServer
于 2016-06-23T02:07:57.707 回答