4

我正在使用 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手动提供,但这个解决方案听起来有点......不舒服。

任何建议都将不胜感激。

4

0 回答 0