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

带PermitAll的OAuth2 ResourceServer 401Spring启动

乐正辰阳
2023-03-14

设置是这样的:作为身份验证服务器,我有一个密钥斗篷,作为API-Gateway,我使用Spring-云网关,NetflixEureka客户端作为发现客户端。当然,我需要用户管理,一个“简单”的注册,用于未经身份验证的人员,并将人员注册为具有管理员角色的用户。资源服务器的WebSecurityConfig(用户管理服务)看起来像这样:

@EnableGlobalMethodSecurity(securedEnabled=true, prePostEnabled=true)
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception 
    {
        
        JwtAuthenticationConverter jwtAuthenticationConverter = new JwtAuthenticationConverter();
        jwtAuthenticationConverter.setJwtGrantedAuthoritiesConverter(new KeycloakRoleConverter());  
        
        http
        .authorizeRequests()
            .antMatchers("/register/**")
            .permitAll()
        .and()
        .authorizeRequests()
            .antMatchers("/usermanagementservice/**")
            .hasAnyRole("admin", "anotherrole")
            .anyRequest()
            .authenticated()
        .and()
            .oauth2ResourceServer()
            .jwt()
            .jwtAuthenticationConverter(jwtAuthenticationConverter);
    }
}

注册控制器看起来像这样:

@RestController
@RequestMapping("/register")
public class RegisterController {

   @Autowired
   private Service service;

   @GetMapping("/status")
   public boolean checkStatus()
   {
        return true;
   }

   @PostMapping("/create")
   public Response createUser(@RequestBody User user)
   {
       return service.doSomething(user);
   }

}

因此,如果一切都在运行,我向本地主机上的API网关发出getRequest:8083/register/status,我将返回布尔值作为响应,如果我向网关发送一个带有Json对象的POST请求,我将获得401未经授权的权限,我在WebSecurityConfig中添加了@Order(1)注释,没有任何更改,就像这里一样。我试着读这个,那个,还有这个,不要忘记那个。但一点运气都没有(任何帮助都将不胜感激。提前非常感谢。:)

共有1个答案

翟英达
2023-03-14
http
.csrf().disable()

是WebSecurityConfig的configure方法中缺少的部分。同学们非常感谢@jzheaux的指导。

 类似资料:
  • } 自定义apiAuthenticationProvider将尝试基于标头中提供的令牌对所有请求进行身份验证,如果身份验证不成功,则抛出AccessException,客户端将收到HTTP 401响应: 这对于需要身份验证的请求非常有效。对于没有身份验证标头的/v2/session请求,这很好。但是,对于/v2/session请求,如果在头部(或在cookie中--代码示例中没有显示;如果客户机没

  • 当我POST到时,我会收到由配置的生成的403响应。但是,我希望这个请求是允许的,因为它由覆盖,并且在之前。 诸如之类的请求工作正常。此外,我命中这些 终结点的集成测试也可以正常工作,这表明与 CORS 有关,尽管预检请求为 200。 你知道这个安全配置有什么问题吗? 这是我的CORS配置: 我从调用这些endpoint,这是返回的项目之一。 以下是来自请求的Spring Security调试日志

  • 我想在我的浏览器上打开招摇的用户界面。这是我的密码 但它不起作用。我仍然需要输入httpBasic()提供的基本身份验证 所以我添加了其他人找到的以下代码 现在,我可以访问localhost:8080/swagger-ui.html,但是仍然会弹出httpBasic窗口。我可以点击cancel关闭窗口,继续使用swagger ui。但是我不知道是什么导致了这个问题

  • 我正在编写一个小应用程序,将其用作微服务的身份验证服务器。(我们正在划分一个旧的单片应用程序)。 此应用程序必须通过LDAP服务器(受用户名和密码保护)登录。用户密码存储为SHA512哈希。但我总是会遇到“糟糕的凭证”错误 这是我的密码 网络安全配置。JAVA 波姆。xml HomeController.java applicationContext安全性。来自当前可用的旧应用程序的xml

  • 这个问题看起来可能重复,但以下答案都没有解释何时使用: 和 HttpSecurity、WebSecurity和AuthenticationManagerBuilder Spring Security中Web忽略和Http允许的区别 通过阅读StackOverflow asnwers和几篇文章,我了解到: configure(HttpSecurity)允许在资源级别配置基于web的安全性。 conf

  • 我正在使用WebServiceTemplate使用soap web服务,它在spring3中工作良好,性能良好。 调用肥皂服务的类 性能结果计时--平均时间约为500ms,最长时间:-1秒 Spring防尘套1.5.20。发布和2.2.2。发布 使用spring boot时,相同的代码在没有任何更改的情况下第一次调用大约需要4秒,如果继续调用相同的代码,则第一次调用大约需要2秒 Spring防尘套