gpt4 book ai didi

spring-boot - JWToken 无效 : kid is a required JOSE Header

转载 作者:行者123 更新时间:2023-12-04 02:58:18 27 4
gpt4 key购买 nike

我正在尝试使用 SpringBoot 实现 Oauth2 授权服务器 guide作为引用。

我的 keystore 只有一个 key 。我已经成功创建了一个 JWToken(我可以在 jwt.io 上查看)。

我还有一个测试资源服务器。当我尝试访问任何端点时,我收到以下消息:

{
"error": "invalid_token",
"error_description": "Invalid JWT/JWS: kid is a required JOSE Header"
}

token 确实没有 child header ,但我不知道如何添加它。我只能使用 TokenEnchancer 将数据添加到其有效负载中。看来我也不是第一个with this issue .

有什么方法可以添加此 header ,或者至少在资源服务器上忽略它?

最佳答案

我一直在写一篇可能对您有帮助的文章: https://www.baeldung.com/spring-security-oauth2-jws-jwk

因此,要配置 Spring Security OAuth 授权服务器以添加 JWT kid header ,您可以按照第 4.9 节中的步骤操作:

  1. 创建一个扩展 JwtAccessTokenConverter 的新类
  2. 在构造函数中:
    1. 使用您一直使用的相同方法配置父类
    2. 使用您正在使用的签名 key 获取 Signer 对象
  3. 覆盖编码方法。该实现将与父级实现相同,唯一的区别是您在创建字符串 token 时还将传递自定义 header
public class JwtCustomHeadersAccessTokenConverter extends JwtAccessTokenConverter {

private JsonParser objectMapper = JsonParserFactory.create();
final RsaSigner signer;

public JwtCustomHeadersAccessTokenConverter(KeyPair keyPair) {
super();
super.setKeyPair(keyPair);
this.signer = new RsaSigner((RSAPrivateKey) keyPair.getPrivate());
}

@Override
protected String encode(OAuth2AccessToken accessToken, OAuth2Authentication authentication) {
String content;
try {
content = this.objectMapper.formatMap(getAccessTokenConverter().convertAccessToken(accessToken, authentication));
} catch (Exception ex) {
throw new IllegalStateException("Cannot convert access token to JSON", ex);
}
Map<String, String> customHeaders = Collections.singletonMap("kid", "my_kid");
String token = JwtHelper.encode(content, this.signer, this.customHeaders)
.getEncoded();
return token;
}
}
  1. 然后,当然,使用此转换器创建一个 bean:
@Bean
public JwtAccessTokenConverter accessTokenConverter(KeyPair keyPair) {
return new JwtCustomHeadersAccessTokenConverter(keyPair);
}

这里我使用 KeyPair 实例来获取签名 key 并配置转换器(基于本文的示例),但您可以根据您的配置进行调整。

在本文中,我还解释了 Spring Security OAuth 身份验证服务器提供的相关端点。

此外,关于 @Ortomala Lokni 的评论,我不希望 Spring Security OAuth 此时添加任何新功能。作为替代方案,您可能可以等待查看 Spring Security 的授权服务器功能,计划在 5.3.0 中发布。

关于spring-boot - JWToken 无效 : kid is a required JOSE Header,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55659509/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com