【问题标题】:How to add filter after the HTTP BasicAuthenticationFilter when using @EnableAuthorizationServer使用 @EnableAuthorizationServer 时如何在 HTTP BasicAuthenticationFilter 之后添加过滤器
【发布时间】:2015-06-26 11:46:26
【问题描述】:

我正在尝试查看以下文档:https://github.com/spring-projects/spring-security-oauth/blob/f25592e682303b0cf89e1d7555174bac18e174df/docs/oauth2.md#mapping-user-roles-to-scopes

在文档中,它说为了将用户角色映射到范围,以及在DefaultOAuth2RequestFactory 中设置checkUserScopes=true,我们需要在HTTP BasicAuthenticationFilter 之后添加TokenEndpointAuthenticationFilter 过滤器。我想知道如何做到这一点。

这是我的 AuthorizationServer 的样子:

@Configuration
@EnableAuthorizationServer
protected static class OAuth2Config extends
        AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;

    @Autowired
    private OAuth2RequestFactory requestFactory;

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) {
        endpoints.authenticationManager(authenticationManager);
        endpoints.requestFactory(requestFactory);
    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients)
            throws Exception {
        clients.withClientDetails(clientDetailsService());
    }

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

    @Bean
    public ClientDetailsService clientDetailsService() {

        Map<String, ClientDetails> clientDetailsStore = new HashMap<String, ClientDetails>();

        Collection<String> scope = new HashSet<String>();
        scope.add("user");
        scope.add("admin");

        Collection<String> authorizedGrantTypes = new HashSet<String>();
        authorizedGrantTypes.add("password");
        authorizedGrantTypes.add("refresh_token");


        BaseClientDetails clientDetails = new BaseClientDetails();
        clientDetails.setClientId("client");
        clientDetails.setClientSecret("secret");
        clientDetails.setScope(scope);
        clientDetails.setAuthorizedGrantTypes(authorizedGrantTypes);

        clientDetailsStore.put("client", clientDetails);

        InMemoryClientDetailsService clientDetailsService = new InMemoryClientDetailsService();
        clientDetailsService.setClientDetailsStore(clientDetailsStore);

        return clientDetailsService;
    }

    @Bean
    public OAuth2RequestFactory requestFactory() {
        DefaultOAuth2RequestFactory requestFactory = 
                new DefaultOAuth2RequestFactory(clientDetailsService());

        requestFactory.setCheckUserScopes(true);

        return requestFactory;
    }
}

另外,如果我们能提供一个 CURL 示例来说明我们如何测试授权类型的密码,那就太好了。

感谢任何帮助!

【问题讨论】:

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


    【解决方案1】:

    您应该能够扩展 AuthorizationServerSecurityConfiguration 并将其包含在您的 Spring 配置中,而不是使用 @EnableAuthorizationServer。例如

    @Configuration
    public class OAuth2Config extends AuthorizationServerSecurityConfiguration {
        @Override
        protected void configure(HttpSecurity http) throws Exception {
           super.configure(http);
           http.addFilterAfter(myFilter(), BasicAuthenticationFilter.class);
        }
    }
    

    【讨论】:

    • 测试这个的 Curl 是: curl -v -u client:secret "localhost:8083/oauth/token" -d grant_type=password -d username=user -d password=password
    • 我没有看到 AuthorizationServerSecurityConfiguration 上定义的“配置”方法。这是什么版本的 Spring Oauth?
    • @GameSalutes 它存在于最新版本 (2.3.5.RELEASE) 中。
    【解决方案2】:

    您还可以通过 AuthorizationServerSecurityConfigurer 添加其他过滤器,尽管它们位于基本身份验证之前,而不是之后。

    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) {
        security.addTokenEndpointAuthenticationFilter(myFilter());
        security.checkTokenAccess("isAuthenticated()");
    }
    

    为 TokenEndpoint 添加新的自定义身份验证过滤器。过滤器将设置在默认 BasicAuthenticationFilter 的上游。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-29
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 2017-11-22
      • 2016-12-08
      相关资源
      最近更新 更多