0

我正在尝试验证在 C# 中使用 RSA256 签名的 JWT 令牌。令牌是在 Javascript 中使用名为 Jose-jwt 的 jwt 库在服务器端创建的。我正在使用 C# 的 System.Security.Cryptography 命名空间类在 WinForms 应用程序中验证令牌。我尝试将 jose-jwt 用于 C#,但显然它不支持从 PEM 编码文件加载密钥。

这是我的验证码:

public static string IsCertValid()
    {
        string token = System.IO.File.ReadAllText(TokenLocation);
        var stream = System.IO.File.OpenRead(PublicKeyLocation);
        var reader = new PemReader(stream);
        var rsaParameters = reader.ReadRsaKey();

        var rsa = System.Security.Cryptography.RSA.Create();
        rsa.ImportParameters(rsaParameters);

        string[] tokenparts = token.Split('.');

        byte[] signature = Encoding.UTF8.GetBytes(tokenparts[2]);
        string dataToVerify = tokenparts[0] + '.' + tokenparts[1];
        byte[] bytesToVerify = Encoding.UTF8.GetBytes(dataToVerify);
        //string decoded = JWT.Decode(token,rsaParameters);
        bool result = rsa.VerifyData(bytesToVerify, signature, System.Security.Cryptography.HashAlgorithmName.SHA256, System.Security.Cryptography.RSASignaturePadding.Pkcs1);
        return result.ToString();
    }

这验证为假,即使我知道令牌对此密钥有效。是否需要使用私钥进行验证?这似乎不太安全。我究竟做错了什么?任何帮助将不胜感激。

4

0 回答 0