【发布时间】: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