【问题标题】:Java + Spring Boot + REST security questionJava + Spring Boot + REST 安全问题
【发布时间】:2019-10-27 04:59:12
【问题描述】:

我是 Java 新手。我正在使用 Spring Boot + OAuth2 身份验证 + Swagger 创建一个 REST api。

我想做的显然是让 swagger 页面允许匿名访问,而 /token/oauth 端点需要基本身份验证。

对于我的控制器,我设置为使用@PreAuthorize,通常使用#oauth2.hasScope('xxx')。我想可能有 get 方法,允许在与锁定方法相同的控制器中进行匿名 GET。

所以...我所做的是在 ResourceServerConfig 中的行为:

http.authorizeRequests().antMatchers("/*").permitAll();

所以基本上,一切都是允许的,然后@PreAuthorize 会覆盖我想要保护的任何内容。

我宁愿使用 PreAuthorize 定义哪些方法被锁定在控制器中,然后维护一个巨大的匿名路径匹配器列表。对我来说似乎更干净。

这一切都按预期工作。任何没有@PreAuthorize 的方法都是开放的,而有@PreAuthorize 的方法需要身份验证。

("/*").permitAll() 有什么危险吗?由于我是 Java 新手,我不确定这是否会打开任何漏洞?似乎有一些“隐藏”端点,因为我必须向 swagger 配置添加一个过滤器:RequestHandlerSelectors.basePackage("org.xxx.yyy") 只显示我的实际 API。

只是想了解任何后果。

谢谢。

【问题讨论】:

    标签: java spring-boot spring-security swagger


    【解决方案1】:

    @SledgeHammer,而不是将其保持打开“/”,而是在控制器中处理它以将其重定向到某个地方,而不是将“/”保持为 permitAll,因此将其应用于特定的 url 模式。

    【讨论】:

    • 我的意思是,我有 /customers/m1 被锁定 w/ PreAuthorize 和 /customers/m2 是开放的(不确定我是否会在现实世界中这样做,更多用于构建一个“shell”)……只关心 /* permitAll 是否打开了它不应该打开的任何东西。
    • 是的,您可以使用 /customers/m1 等您可以保护的特定对象和 /customers/m2 您可以设置 permitAll 但避免使用 "/*" 来 permitAll 作为对所有人的访问。
    • 是的,但是我必须使用 PreAuthorize 进行装饰并维护一个公共端点列表,不是吗?使用 /* 我只需要 PreAuthorize。
    【解决方案2】:

    你不应该使用 ("/*").permitAll() 因为它总是评估为真 例如,“denyAll”将拒绝访问所有匹配的消息; "permitAll" 将授予对所有匹配项的访问权限,因此如果您 p​​ermitAll,则无需实施安全性。

    【讨论】:

    • 我认为你错过了我问题的一个关键点:)。我希望能够使用@PreAuthorize 控制控制器的安全性。如果 /customers/m1 有预授权而 /customers/m2 没有怎么办?然后 /customers/m2 应该是公开的。现在,这两种方式似乎几乎相同。将所有内容设为私有并列出所有公共点,或将所有内容设为公开并列出所有私有点。基本上没有 /*,我无法通过在列表中指定端点来公开端点? IE。大摇大摆之类的?有没有类似@PreAuthorize 的注解方式?
    • 通过使用 /*,它默认将所有内容设为公开,然后 @PreAuthorize 将私有设为私有,不是吗?当我设置 swagger 时,默认情况下它会公开“隐藏”的控制器,这让我很担心。
    • Instedof /* 你可以使用 .antMatchers("/h2-console/**/**").permitAll() 或 .antMatchers("/auth/**").permitAll()这是一个很好的例子github.com/vaquarkhan/jwt-spring-security-demo
    • 我明白你在说什么:)。我要问的是这样我必须专门列出所有公共端点加上在私有端点上使用 PreAuthorize 来定义范围。如果我有一个具有私有和公共的控制器,那么该列表将变得巨大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 2016-09-18
    • 2018-03-25
    • 2014-09-16
    • 2018-09-10
    相关资源
    最近更新 更多