JWT 持有者不断返回 401 状态 - 持有者错误 = "invalid_token" , error_description= "The iss claim is not valid"



我使用邮差和spring boot,我使用Keycloak作为身份验证服务。我用postman向Keycloak服务器发出请求,Keycloak服务器返回给我一个bearar令牌,然后我将该令牌发送给spring服务器进行身份验证,但是spring回复该令牌的iss声明无效。

我的代码

类配置:

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {

http.csrf().disable().sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS).and().authorizeRequests()
.antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
.antMatchers("/genere/**").permitAll()
.antMatchers("/valutazione/**").permitAll()
.antMatchers("/users/**").permitAll()
.antMatchers("/carrello/**").permitAll()
.antMatchers("/film/**").permitAll()
.anyRequest().authenticated().and().oauth2ResourceServer().jwt();
}

类restController:

@RestController
public class HomeController {
@GetMapping("/")
@PreAuthorize("hasAuthority('user')")
public String home(@RequestParam(value="someValue") int value){
return "Welcome,"+ Util.getEmail()+" "+value+" !";
}
}

application.yaml

keycloak:
realm: demo
resource: spa-demo
auth-server-url: http://localhost:8080/realms/demo/account
spring:
security:
oauth2:
resourceserver:
jwt:
jwk-set-uri: http://localhost:8080/realms/demo/protocol/openid-connect/certs
issuer-uri: http://localhost:8080/realms/demo/

我在开发模式下使用命令kc.bat start-dev启动keyclok。

Spring conf和issclaim必须完全匹配。

将您从Keycloak中获得的一个授权令牌放入https://jwt.io等工具中,并将issclaim的值复制到spring配置中。

问题在于issue -uri中demo后面的斜杠。正确的格式是:

issuer-uri: http://localhost: 8080/领域/演示

相关内容

  • 没有找到相关文章