我们使用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"))
};