我正在使用 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
手动提供,但这个解决方案听起来有点......不舒服。
任何建议都将不胜感激。