我正在使用spring-security-oauth2实现OAuth2授权服务器。服务器已配置为发出JWT,到目前为止,它可以正常工作。
现在我想对令牌进行签名。有很多代码和示例可用于在客户端验证令牌和签名。
我的问题: spring-security是否提供了一种API,可以通过一种易于访问的方式创建这样的令牌?
详细信息: 如果我正确理解规范,授权服务器可能会发出如下JWT:
Header:
{
"alg": "RS256",
"typ": "JWT",
"kid": "id_of_key"
}
Payload:
{
"exp": 1541868374,
"user_name": "user@example.com",
"jti": "d6a501bf-ebce-4011-9e18-a77f3303c34b",
"client_id": "my_very_cool_app",
"scope": [
"email"
]
}
和一些HTTP端点,例如/.well-known/jwks.json
{
"keys": [
{
"kty": "RSA",
"e": "AQAB",
"use": "sig",
"kid": "id_of_key",
"n": "public key"
}
]
}
请注意kid
属性。
虽然在设置过程中通过调用JwtAccessTokenConverter.setKeyPair(KeyPair
来对令牌进行签名很容易,但是我找不到发布密钥的任何支持。
在JwtAccessTokenConverter.encode(OAuth2AccessToken, OAuth2Authentication)
中有一个对org.springframework.security.jwt.JwtHelper.encode(CharSequence, Signer)
的呼叫。
我可以复制JwtAccessTokenConverter
并将该调用迁移到JwtHelper.encode(CharSequence, Signer, Map<String, String>)
,手动提供kid
,但是这种解决方案听起来有点...不舒服。
任何建议都将受到赞赏。