【问题标题】:How to know if request is made via oauth2 authorization?如何知道请求是否通过 oauth2 授权发出?
【发布时间】:2021-07-05 06:25:36
【问题描述】:

我有某些端点“/ui/”和“/non-ui/”。在“/ui/”端点上,启用了 Oauth2 代码授权类型。但是,同样的 ui 用户,在成功 oauth2 登录后也可以访问“/non-ui/”端点。我既不希望 ui 用户能够访问“/non-ui/”端点,也不希望为“/non-ui/”端点启用 oauth2 登录。

要从 oauth2 登录中排除“/non-ui/**”端点,我可以使用以下代码:

public void configure(WebSecurity webSecurity) {
        webSecurity.ignoring().antMatchers("/non-ui/**");
    }

如何限制 ui 用户访问“/non-ui/”端点。如上代码只是将其公开,ui 用户可以访问“/non-ui/”端点?

有没有办法让我知道请求是通过 oauth2 身份验证发出的?我认为通过这种方式我可以使用一些过滤器和控制访问权限。

有关用例的更多上下文。 就像刚才我添加了一个安全过滤器并从 webSecurity.ignoring() 中删除了“/non-ui/**”端点并获得了额外的标头信息.

由于在非 ui 端点上已经启用了基本身份验证,这就是为什么我可以从中获取更多信息的原因,即请求是否通过基本身份验证机制触发。当 UI 用户点击非 UI 端点时,相同的标头字段会反映为未经身份验证。

基于此信息,我将拒绝具有未经身份验证的标头信息的请求。但是,我仍然无法理解是否发出了经过身份验证的非 ui 请求,那么我该如何绕过 oauth2 身份验证机制。

【问题讨论】:

    标签: java spring-boot spring-security oauth-2.0 servlet-filters


    【解决方案1】:

    您可以将 ROLES 添加到 ROLE_UI 和 ROLE_NONUI 等用户,并检查角色以按角色访问端点,例如

    .antMatchers("/ui/*").hasRole("ROLE_UI")
    

    .antMatchers("/non-ui").hasRole("ROLE_NONUI")
    

    【讨论】:

    • 我提供了更多上下文。由于已经在非 ui 端点上启用了基本身份验证,因此我可以从标头中破译。所以我不能使用角色。
    猜你喜欢
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-08-27
    • 2017-01-08
    • 1970-01-01
    • 2021-03-13
    • 2019-09-24
    • 1970-01-01
    相关资源
    最近更新 更多