Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 加密JWT安全令牌支持的算法_C#_.net Core_Jwt_Encryption Symmetric_Netcoreapp2.1 - Fatal编程技术网

C# 加密JWT安全令牌支持的算法

C# 加密JWT安全令牌支持的算法,c#,.net-core,jwt,encryption-symmetric,netcoreapp2.1,C#,.net Core,Jwt,Encryption Symmetric,Netcoreapp2.1,我正试图用以下代码片段对我的JWt进行签名和编码: var claims = new Claim[] { new SomeClaimes() }; var scKey = Encoding.UTF8.GetBytes("SOME KEY"); var ecKey = Encoding.UTF8.GetBytes("SOME OTHER KEY"); var tokenDescriptor = new SecurityTokenDescriptor { Subject = new Clai

我正试图用以下代码片段对我的JWt进行签名和编码:

var claims = new Claim[] { new SomeClaimes() };
var scKey = Encoding.UTF8.GetBytes("SOME KEY");
var ecKey = Encoding.UTF8.GetBytes("SOME OTHER KEY");
var tokenDescriptor = new SecurityTokenDescriptor {
    Subject = new ClaimsIdentity(claims),
    SigningCredentials = new SigningCredentials(
        new SymmetricSecurityKey(
            scKey),
            SecurityAlgorithms.HmacSha512),
    EncryptingCredentials = new EncryptingCredentials(
        new SymmetricSecurityKey(
            ecKey),
            // I tryied all possible combination of algorithms here:
            SecurityAlgorithms.XXXX,
            SecurityAlgorithms.YYYY), 
    Issuer = "My Jwt Issuer",
    Audience = "My Jwt Audience",
    IssuedAt = DateTime.UtcNow,
    Expires = DateTime.Now.AddDays(7),
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateJwtSecurityToken(tokenDescriptor);
var jwt = tokenHandler.WriteToken(token);
但是当我运行代码时,我得到了一个错误:

加密失败。不支持:算法:“{0}”,安全密钥:“{1}”


其中
{0}
{1}
是上述代码中
XXXX
YYYY
的任意组合(是的,我编写了一个反射片段,并尝试了所有可能的组合)。哪些是编码(和解码)已签名JWT的受支持算法?

最后我找到了答案:

var claims = new Claim[] { new SomeClaimes() };
var scKey = Encoding.UTF8.GetBytes("SOME KEY");
var ecKeyTemp = Encoding.UTF8.GetBytes("SOME OTHER KEY");

// Note that the ecKey should have 256 / 8 length:
byte[] ecKey = new byte[256 / 8];
Array.Copy(ecKeyTemp, ecKey, 256 / 8);

var tokenDescriptor = new SecurityTokenDescriptor {
    Subject = new ClaimsIdentity(claims),
    SigningCredentials = new SigningCredentials(
        new SymmetricSecurityKey(
            scKey),
            SecurityAlgorithms.HmacSha512),
    EncryptingCredentials = new EncryptingCredentials(
        new SymmetricSecurityKey(
            ecKey),
            SecurityAlgorithms.Aes256KW,
            SecurityAlgorithms.Aes256CbcHmacSha512), 
    Issuer = "My Jwt Issuer",
    Audience = "My Jwt Audience",
    IssuedAt = DateTime.UtcNow,
    Expires = DateTime.Now.AddDays(7),
};
var tokenHandler = new JwtSecurityTokenHandler();
var token = tokenHandler.CreateJwtSecurityToken(tokenDescriptor);
var jwt = tokenHandler.WriteToken(token);

如您所见,使用
SecurityAlgorithms.Aes256KW
作为密钥加密算法,使用
SecurityAlgorithms.Aes256CbcHmacSha512
作为加密算法将完成此任务。请注意,用于加密算法的密钥应具有
256/8
长度。

请在回答中详细说明?也许会附加一些代码示例?问题不在于是否有一个或多个键。请再读一遍问题。我不是c#专家,但HmacSha512不是SymetricSecurity。请尝试新的ASymmetricSecurityKey或类似的东西