【发布时间】:2021-02-21 18:22:43
【问题描述】:
在授权服务器上,我的 Jwt 是这样生成的:
@Value("${jwt.key}")
private String jwtKey;
@Override
public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
endpoints
.authenticationManager(authenticationManager)
.tokenStore(tokenStore)
.accessTokenConverter(jwtAccessTokenConverter);
}
@Bean
public TokenStore tokenStore() {
return new JwtTokenStore(jwtAccessTokenConverter());
}
@Bean
public JwtAccessTokenConverter jwtAccessTokenConverter() {
var converter = new JwtAccessTokenConverter();
converter.setSigningKey(jwtKey);
return converter;
}
现在在响应式资源服务器端:
@Value("${jwt.key}")
private String jwtKey;
@Bean
public SecurityWebFilterChain securityWebFilterChain(ServerHttpSecurity http) {
return http
.authorizeExchange()
.anyExchange().authenticated()
.and()
.oauth2ResourceServer()
.jwt(jwtSpec -> {...})
.and.build();
}
在给定签名密钥的情况下,如何配置我的反应式资源服务器以使用该令牌?
【问题讨论】:
-
你在使用 Spring Boot 吗? (如果没有,为什么不使用 Webflux?)
-
是的,我用的是spring boot
-
我不知道你在说什么。 jwt 没有“密钥”。而且您不使用“令牌”。您使用 jwk(json web 密钥)对 jwt 进行签名,并且您的授权服务器中有私钥,并且您将公钥分发给需要验证标牌的所有应用程序。您的标准,为资源服务器提供一个 url,以便授权服务器可以按给定的时间间隔轮换密钥。而且您不应该在两台服务器之间“共享”相同的密钥。您需要一个密钥对。
-
如果你的术语正确并理解你是如何做到的,它会记录在 spring boot 安全参考手册中。我建议你阅读一下 oauth 和 jwts 的工作原理,文档真的很好docs.spring.io/spring-security/site/docs/current/reference/…
-
请告诉我配置...这就是我在这里的原因。我知道如何管理非反应性。但对于反应式,它似乎必须通过
.oauth2ResourceServer().jwt(jwtSpec -> {...})。我只是不认识男人
标签: java spring-security spring-webflux spring-security-oauth2