在spring-security-oauth2中是否支持JWT签名/加密?

时间:2018-11-12 10:10:43

标签: java jwt spring-security-oauth2 jwk

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

任何建议都将受到赞赏。

0 个答案:

没有答案