忽略 Spring Boot 中某些端点的授权

Posted

技术标签:

【中文标题】忽略 Spring Boot 中某些端点的授权【英文标题】:Ignore authorization for some endpoints in Spring Boot 【发布时间】:2021-04-13 22:47:30 【问题描述】:

我的 OAuth 服务器和客户端正在被 Oauth2 授权。

现在,如果我需要调用我的服务,我需要:

    使用以下 API 从服务器生成访问令牌:

    localhost:9191/oauth/token?grant_type=password&username=krish&password=kpass

    给出的响应如下:

    "access_token": "ee41435d-8ad9-432e-82c1-07477e2b6956",
    "token_type": "bearer",
    "refresh_token": "ea6d83b4-62f6-4eaf-9f89-8600bd36690d",
    "expires_in": 3429,
    "scope": "READ WRITE"
    

    现在我正在传递访问令牌,以运行如下客户端服务:

所以这是我手动操作的。但我需要从客户端代码运行它。当我试图点击第一个 API 本身(服务器)来获取令牌时,它说的是未经授权的。 我的服务代码如下:

我需要跳过来自/getToken 控制器的身份验证。我怎样才能做到这一点?谁能帮忙

我的 WebSecurityConfigurerAdapter 类如下: 我在阅读下面的一个答案后添加了突出显示的代码,但这也不起作用。

【问题讨论】:

【参考方案1】:

您可能希望创建一个扩展 WebSecurityConfigurerAdapter 的新配置并覆盖配置方法。 看看这个guide 的实际例子。 想要你要关注的是这部分

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter 
    @Override
    protected void configure(HttpSecurity http) throws Exception 
        http
            .authorizeRequests()
                .antMatchers("/", "/home").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    

正如您在示例中看到的,路径“/login”、“/”、“/home”被排除在身份验证之外。 还要检查这个其他答案:Spring Security exclude url patterns in security annotation configurartion

【讨论】:

我需要添加客户端还是服务器? @berrur 在服务器中,这是一个 Spring 配置。只需创建一个新类并使用注解@Configuration,Spring 就会处理它。我假设您使用的是 Spring,因为您使用 Spring Boot 和 Spring Security 标记了此答案。 是的,我按照您所说的添加了配置,但这也不起作用。然后它还验证 (/getName) 请求。我在问题中添加了屏幕截图。请检查@berrur 尝试覆盖configure(WebSecurity web)并使用web.ignoring().antMatchers("/getToken") 还可以查看this other answer 以进一步了解如何操作 Spring Security 行为

以上是关于忽略 Spring Boot 中某些端点的授权的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot REST 端点忽略 Content-Type

在安全的 Spring Boot RESTful API 上为登录创建不安全的端点 - WebConfig 似乎被忽略了

在 Spring Boot 中配置 Hibernate 以忽略通过依赖项导入的标有 Entity 的某些类

如何在Spring Security中忽略端点?

如何忽略 Spring Security 中的端点?

spring boot ldap 组和受限端点