加密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不需要任何加密,因为只有身份验证的用户才能读取令牌,这意味着,我正在阅读有关自己的内容,而且实际的通信将超过安全层。因此,实际上还不需要加密令牌,我的要求是令牌不应该是人类可读

您的理解是正确的,但是您缺少JWT的重要功能:加密令牌不是JWT的目的。
该算法使用的秘密用于签名令牌,而不是用于对其进行加密,有关更多信息,请查看RFC7515。
如下注释中所建议的还有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"))
};

最新更新