忽略 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 似乎被忽略了