Spring Security OAuth2 Jwt 访问被拒绝
Posted
技术标签:
【中文标题】Spring Security OAuth2 Jwt 访问被拒绝【英文标题】:Spring Security OAuth2 Jwt Access Denied 【发布时间】:2020-12-19 02:21:24 【问题描述】:我正在尝试编写有关 Spring Security 和 OAuth2、Spring boot 1.5 的教程 https://www.tutorialspoint.com/spring_boot/spring_boot_oauth2_with_jwt.htm。我可以获得访问令牌。但是当我尝试获取端点时,我在 Postman 中收到拒绝访问错误。我正在使用 Mac 操作系统。
配置方法
@Override
protected void configure(HttpSecurity http) throws Exception
http.authorizeRequests().anyRequest().authenticated().and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.NEVER);
在 tokenEnhancer 方法中我注释了公钥,因为我有一个关于 Mac 验证的错误
@Bean
public JwtAccessTokenConverter tokenEnhancer()
JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
converter.setSigningKey(privateKey);
//converter.setVerifierKey(publicKey);
return converter;
【问题讨论】:
403 错误表示用户已通过身份验证但无权访问。用户未授权。你能展示你的 configure(HttpSecurity http) 方法吗? 【参考方案1】:具有适当 GrantedAuthority 的用户应该可以访问端点,并且可以通过下一个设置来实现。
例如
@Override
protected void configure(HttpSecurity http) throws Exception
http.authorizeRequests()
.antMatchers("/products/**").hasRole("USER")
.anyRequest().authenticated()
.and().sessionManagement()
.sessionCreationPolicy(SessionCreationPolicy.NEVER);
另一方面,需要了解用户的“角色”。
可以签入数据库或其他保存此信息的地方。
或者需要找到定义当前用户原理的方法。这取决于身份验证的类型。实现方法doFilterInternal
OncePerRequestFilter抽象类负责定义Priciple。
【讨论】:
以上是关于Spring Security OAuth2 Jwt 访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
Spring-Security OAuth2 设置 - 无法找到 oauth2 命名空间处理程序
Spring Security OAuth2 v5:NoSuchBeanDefinitionException:'org.springframework.security.oauth2.jwt.Jwt
针对授权标头的Spring Security OAuth2 CORS问题