C# Jwt Dotnet未生成有效的令牌

C# Jwt Dotnet未生成有效的令牌,c#,encryption,jwt,C#,Encryption,Jwt,我试图用C#生成一个有效的JWT令牌,我的代码是 string secret = "6ASu2c8V/zF..........******"; // base64encoded var payload = new Dictionary<string, string> { {"iss", "http://webapi.one*******"}, {"exp", "1498140965"},

我试图用C#生成一个有效的JWT令牌,我的代码是

        string secret = "6ASu2c8V/zF..........******"; // base64encoded
        var payload = new Dictionary<string, string>
        {
            {"iss", "http://webapi.one*******"},
            {"exp", "1498140965"},
            {"aud", "ONE****"},
            {"playauth", "Ygo2s********"}
        };

        IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
        IJsonSerializer serializer = new JsonNetSerializer();
        IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
        IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);

        var token = encoder.Encode(payload,secret);
        return token;
string secret=“6ASu2c8V/zF…………*******”;//Base64编码
var payload=新字典
{
{“iss”http://webapi.one*******"},
{“exp”,“1498140965”},
{“澳元”,“一****”},
{“playauth”,“Ygo2s********”}
};
IJwtAlgorithm=新的HMACSHA256Algorithm();
IJsonSerializer serializer=新的JsonNetSerializer();
IBASE64URLENCDER URLENCDER=新的JWTBASE64URLENCDER();
IJwtEncoder=新的JwtEncoder(算法、序列化程序、URLCoder);
var token=encoder.Encode(有效载荷,秘密);
返回令牌;
当我运行代码时,它生成了令牌

EYJ0Exaiioijkv1qiljHbGcgiuzi1Nij9.EYJpC3mioIjOdHrWOI8Vd2ViyxBPLm9UzzjLzWwwUbMv0iIiwizxHwJnDk4TqWO1LcHdWwQioijJg2Nbg5PdG5PdGj9.Muwc9TebfIzfoiFSH2E(-UFQl4UZ9kTBG19


但此令牌在上显示无效签名,我在验证签名上使用了正确的密钥,我最终解决了它。我将based64编码的令牌转换为字节数组,它工作得非常好。以下是新代码:

        byte[] secret = Convert.FromBase64String("6ASu2c8V/zF*******");

        var payload = new Dictionary<string, object>
        {
            {"iss", "http****"},
            {"aud", "O***"},
            {"exp", expiryDate},
            {"nbf", createdDate}
        };

        IJwtAlgorithm algorithm = new HMACSHA256Algorithm();
        IJsonSerializer serializer = new JsonNetSerializer();
        IBase64UrlEncoder urlEncoder = new JwtBase64UrlEncoder();
        IJwtEncoder encoder = new JwtEncoder(algorithm, serializer, urlEncoder);

        var token = encoder.Encode(payload, secret);
        return token;
byte[]secret=Convert.FromBase64String(“6ASu2c8V/zF*****”);
var payload=新字典
{
{“iss”,“http****”},
{“aud”,“O***”},
{“exp”,expiryDate},
{“nbf”,createdDate}
};
IJwtAlgorithm=新的HMACSHA256Algorithm();
IJsonSerializer serializer=新的JsonNetSerializer();
IBASE64URLENCDER URLENCDER=新的JWTBASE64URLENCDER();
IJwtEncoder=新的JwtEncoder(算法、序列化程序、URLCoder);
var token=encoder.Encode(有效载荷,秘密);
返回令牌;

您的代码(几乎)与my中的代码相同。反复检查是否正确地将所有内容复制到jwt.io中。制作一个新的(临时)密钥,并将其与令牌一起添加到问题中,以便我们进行验证。我看到的一个区别是,我的密钥只是一个长的十六进制字符串(例如,
28f029d79bedb87…
),而你的密钥(显然)是base64编码的。