我使用邮差和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和iss
claim必须完全匹配。
将您从Keycloak中获得的一个授权令牌放入https://jwt.io等工具中,并将iss
claim的值复制到spring配置中。
问题在于issue -uri中demo后面的斜杠。正确的格式是:
issuer-uri: http://localhost: 8080/领域/演示