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

Spring安全无功混合HttpBasic OAuth2

童子明
2023-03-14

我正在尝试一个安全Webflux配置,在这里我可以使用httpBasic登录一些资源,并使用oAuth登录其他资源

到目前为止,我还不知道该怎么做;似乎,在非反应性的方式中,可以使用某种领域名称或其他什么来实现,但在反应性的方式中,这并不存在,我认为这是因为它与线程的工作流或与web过滤器链中的工作流相关

但是我现在在科特林有以下几点,

return http.httpBasic().authenticationManager {...}
    .and()
       .oauth2ResourceServer()
          .jwt()
          .and()
    .and()
    .authorizeExchange()
    .pathMatchers(* noAuthPaths).permitAll()
    .pathMatchers(* basicAuthPaths).authenticated()
    .anyExchange().access{...}
    .and().csrf().disable()
    .build()

检查noAuthPaths和basicAuthPaths是否只是字符串模式的数组,最后一个数组(basicAuthPaths)就是我想使用HttpBasic的数组。

如果我在浏览器中调用该资源,并且它列在BasicAuthPath中,我希望登录弹出请求基本身份验证凭据。如果不是的话,我希望是持票人代币。

使用当前配置,如果我在postman中使用Basic Auth调用资源,我可以访问数组中列出的所有资源以及来自任何Exchange方法的资源。此外,如果我在浏览器中输入资源,登录表单不会弹出。

有人知道如何为不同的资源支持这两种策略吗?谢谢

我尝试了这个答案中的建议,但没有成功。

我用Okta作为OAuth IDP创建了一个简单的示例。

在使用带有订单注释的不同bean的情况下,我无法让它运行,总是获得403状态,如果访问一个bean被认为是基本身份验证,它也会要求Okta身份验证。

至少在只有一个Bean配置的情况下,我设法从secureoauthendpoint看到答案,而securebasicendpoint由于访问策略而拒绝。

在这两种情况下,始终调用OAuth身份验证。

感谢@greiker的建议,他在我的示例中添加了一个PR,你可以在这里找到它

在pull请求中,你可以找到我的一些评论,这些评论将用于Okta用例,并推动人们在需要时进行检查,但是建议的更改不会被删除,因为它们涵盖了更广泛的情况。

共有1个答案

郑伟彦
2023-03-14

假设显示的代码来自@配置类。您可以将配置拆分为多个类,并在第一个类中添加@Order(1),在第一个类中配置基本身份验证(最终为这些路径配置permitAll),并拒绝OAuth URL的连接

然后@order(2)在第二个配置OAuth路径的地方。

将两者混合在同一个文件中只会让你头疼,但我相信可以通过AuthenticationEntryPoint完成。

 类似资料:
  • TL;DR 有没有办法将Spring Web Security配置与注释和xml混合使用? 完整故事 对于我们的传统spring web应用程序,我们正在考虑将注释驱动配置用于web安全的一部分。 目前我们所有的网络安全(

  • 当我用HTTPS浏览我的网站时,我面临着复杂的内容问题。我从jQuery调用API,但我没有提到协议,所以假设浏览器应该选择与浏览站点相同的协议(http或https)。我的jquery代码如下所示: 在超文本传输协议中浏览站点并执行所需操作以获取结果时,它可以正常工作(能够从API调用中获取结果)。但是当我浏览站点并尝试在https中获取结果时,我在浏览器控制台中遇到了以下错误。即使我使用htt

  • 我想把春靴和Redis混在一起。以下是依赖项:https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-parent/1.5.10.release https://mvnrepository.com/artifact/org.springframework.data/spring-data-red

  • 问题内容: 我正在努力使网站在HTTPS下可以正常运行。作为其中的一部分,我想确保我们永远不会“破坏锁”。也就是说,我们永远不要在SSL页面上加载非SSL内容,这可能会触发警告或其他指示符,具体取决于浏览器。为了验证这种情况,我想做两件事: 编写Selenium测试以验证各种操作不会破坏锁。 用JS编写日志记录代码,以在用户会话期间检查锁是否已损坏,如果存在则重新登录到服务器。 JS中是否可以使用

  • 我正在处理todo列表,它工作正常,但当我将spring security添加到project并单击添加时,它给出了 2016-07-10 04:32:34.441 WARN 6692---[nio-8080-exec-8]O.s.web.servlet.PageNotFound:不支持请求方法“POST” 这个问题的任何解决方案 app.js 注意,让它工作,它检索所有的任务,但在网络开发人员c

  • 我正在使用Spring Security。我有一个控制器,其中某些方法必须能够被任何用户访问,无论他是否经过身份验证,某些方法必须能够仅访问使用JWT令牌进行身份验证的用户。我已经配置了一些带有acces="permitAll()"的模式,但似乎不起作用。如果我尝试访问localhost:8080/name-of-the-app/services/public/whatever我得到401,我在我