当前位置: 首页 > 知识库问答 >
问题:

spring security仍在考虑在授权头中传递的令牌,如果令牌无效,则返回401

宿嘉庆
2023-03-14

我在项目中使用spring security oauth。通过在spring security ResourceServerConfigurerAdapter中配置,我将一些URL从身份验证中排除。我添加了http。授权请求()。蚂蚁匹配器(url)。permitAll()

现在,我看到的是,如果我不将授权头传递给这些URL,它就没有经过身份验证。API被正确调用。

如果调用使用授权标头进行,则它会验证令牌,如果令牌未验证,则调用失败。

我的问题是,我需要做些什么,以便在我已批准的请求中忽略令牌。

共有3个答案

祁默
2023-03-14

如果你正在处理反应式Spring网络流量,来自苏成Koh的回答。

@Configuration
@EnableWebFluxSecurity
@EnableReactiveMethodSecurity
@Order(1) // this is important to run this before Spring OAuth2
public class PublicSecurityConfiguration {


    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {

        http

            .authorizeExchange()
            .pathMatchers("/api/public/**").permitAll();
        return http.build();
    }
}
齐昆
2023-03-14

根据spring-oauth2文件https://projects.spring.io/spring-security-oauth/docs/oauth2.html

注意:如果您的授权服务器也是一个资源服务器,那么还有另一个优先级较低的安全过滤器链来控制API资源。对于那些要受访问令牌保护的请求,您需要它们的路径与面向用户的主筛选器链中的路径不匹配,因此请确保在上面的WebSecurity配置中包含一个请求匹配器,该匹配器只选择非API资源。

因此,定义具有比ResourceServerConfig更高顺序的WebSecurityConfigrer实现。

葛哲彦
2023-03-14

Spring OAuth2将拦截所有标题为授权承载xxx的url。

避免Spring OAuth2拦截url。我创建了一个比Spring OAuth2配置更高阶的SecurityConfiguration。

@Configuration
@EnableWebSecurity
@Order(1) // this is important to run this before Spring OAuth2 
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        List<RequestMatcher> requestMatchers = new ArrayList<RequestMatcher>();
        // allow /api/public/product/** and /api/public/content/** not intercepted by Spring OAuth2
        requestMatchers.add(new AntPathRequestMatcher("/api/public/product/**"));
        requestMatchers.add(new AntPathRequestMatcher("/api/public/content/**"));

    http
        .requestMatcher(new OrRequestMatcher(requestMatchers))
    .authorizeRequests()
      .antMatchers("/api/public/product/**", "/api/public/content/**").permitAll()
    }
}

上述配置允许/api/public/product/**和/api/public/content/**由该配置处理,而不是由Spring OAuth2处理,因为该配置具有更高的@Order。

因此,即使将无效令牌设置为上述api调用,也不会导致无效访问令牌。

 类似资料:
  • 我正在尝试刷新从wso2 identity server获得的访问令牌(基于https://docs.wso2.com/display/IS510/Refresh令牌授权);服务器返回无效的授权类型响应 访问令牌是使用openid范围的“授权代码”授权类型获得的。 我已经打开了服务器上的日志记录;然而,我无法确定无效授权类型响应的原因。如何让WSO2 Identity Server使用刷新令牌刷新

  • 我与React、Express、MongoDB的应用程序。 我想为Axios post请求传递带有标头的身份验证令牌。 但是,当我试图通过它,得到403错误(禁止)。 本地存储 我正在从本地存储中检索所有身份验证数据 Axios。邮递 我在这里调用axios post请求 API头和响应 这是我从浏览器中得到的响应 我的邮递员电话打得很好

  • 我使用springfox 2.9.2我有这样的api: 女巫来自身份验证服务器。我尝试在swagger中首次调用此服务器,并将其传递给像上面这样的控制器请求。所以我做 在Swagger ui上,授权调用成功返回了令牌,但它没有将令牌添加到请求头中。它会产生 如果我像这样设置令牌:

  • 我有一个计划的WebJob,每天运行,检查数据库中所有用户的密码过期日期。如果密码到期日是今天,它将生成密码重置令牌并通过电子邮件发送给用户。然后用户单击电子邮件中的url,并被带到一个网站,在那里输入新密码。 我设法在我的WebWork中生成一个令牌,并通过电子邮件发送。但是,通过我的Asp重置密码时。NET网站我得到无效令牌。我不明白为什么。我假设它一定与我的WebWork中的令牌提供商有关。

  • 我已经在stackoverflow中阅读了一些关于这个主题的其他帖子,但我仍然没有找到解决方案...:\ 非常感谢您的支持!

  • 定义的新集成密钥9xxx7e null 但仍然得到401的回应内容: