加密JWT令牌

时间:2019-03-04 11:16:42

标签: c# asp.net-web-api encryption jwt

我们正在使用JWT Nuget创建和验证令牌。这是我们用来创建令牌的代码

private string CreateAccessToken(Dictionary<string, object> payload)
    {
        IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
        IJsonSerializer serializer = new JsonNetSerializer();
        IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
        IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);
        var token = encoder.Encode(payload, GetJWTKey());
        return token;
    }

我的理解是,这不会加密令牌,因为我可以通过访问jwt.io来解析令牌并能够读取内容。我想对令牌进行加密,以使它不应该被解析。我无法在JWT Nuget中找到任何方法来加密令牌。

那我该如何使用JWT Nuget签名和加密令牌?

编辑:

我了解JWT不需要任何加密,因为只有经过身份验证的用户才可以读取令牌,这意味着,我正在阅读自己的内容,并且实际的通信将通过安全层进行。所以实际上还不需要加密令牌,我的要求是令牌不应该是人类可读的

1 个答案:

答案 0 :(得分:4)

您的理解是正确的,但是您缺少JWT的重要功能:加密令牌不是JWT的目的。
该算法使用的机密用于签名令牌,而不用于对其进行加密,有关更多信息,请查看RFC 7515
如下面的注释所建议,还有RFC 7516,即Json Web加密(JWE)。
要在C#应用程序中使用JWE,您必须使用System.IdentityModel.Tokens.Jwt程序包,然后使用以下命令:

var handler = new JwtSecurityTokenHandler();
var tokenDescriptor = new SecurityTokenDescriptor
{
    Audience = "audience",
    //other property
    EncryptingCredentials = new X509EncryptingCredentials(new X509Certificate2("path/to/public/key"))
};