JWT-декодирование не выполняется во время создания ключа - PullRequest
1 голос
/ 11 июня 2019

Я написал следующее для декодирования токена JWT, конечно, с помощью stackoverflow.Я думаю, что есть проблема с открытым ключом.Потому что он не работает только при создании ключа.

class Program
{
    static void Main(string[] args)
    {
        string token = "TOKEN STRING";
        string key = "KEY STRING";

        string result = ValidateJWT(token, key);
        Console.WriteLine(result);
    }

    public static string ValidateJWT(string tokenTodecode, string publicKey)
    {
        string[] parts = tokenTodecode.Split('.');
        string header = parts[0];
        string payload = parts[1];
        byte[] crypto = Base64UrlDecode(parts[2]);

        string headerJson = Encoding.UTF8.GetString(Base64UrlDecode(header));
        JObject headerData = JObject.Parse(headerJson);

        string payloadJson = Encoding.UTF8.GetString(Base64UrlDecode(payload));
        JObject payloadData = JObject.Parse(payloadJson);


        var keyBytes = Convert.FromBase64String(publicKey); 

        AsymmetricKeyParameter asymmetricKeyParameter = PublicKeyFactory.CreateKey(keyBytes);
        RsaKeyParameters rsaKeyParameters = (RsaKeyParameters)asymmetricKeyParameter;
        RSAParameters rsaParameters = new RSAParameters();
        rsaParameters.Modulus = rsaKeyParameters.Modulus.ToByteArrayUnsigned();
        rsaParameters.Exponent = rsaKeyParameters.Exponent.ToByteArrayUnsigned();
        RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
        rsa.ImportParameters(rsaParameters);

        SHA256 sha256 = SHA256.Create();
        byte[] hash = sha256.ComputeHash(Encoding.UTF8.GetBytes(parts[0] + '.' + parts[1]));

        RSAPKCS1SignatureDeformatter rsaDeformatter = new RSAPKCS1SignatureDeformatter(rsa);
        rsaDeformatter.SetHashAlgorithm("SHA256");
        if (!rsaDeformatter.VerifySignature(hash, FromBase64Url(parts[2])))
        {
            return "";
        }    

        return payloadData.ToString();
    }
    public static byte[] Base64UrlDecode(string arg)
    {
        var decrypted = ToBase64(arg);

        return Convert.FromBase64String(decrypted);
    }

    public static string ToBase64(string arg)
    {
        if (arg == null)
        {
            throw new ArgumentNullException("arg");
        }

        var s = arg
                .PadRight(arg.Length + (4 - arg.Length % 4) % 4, '=')
                .Replace("_", "/")
                .Replace("-", "+");

        return s;
    }

    static byte[] FromBase64Url(string base64Url)
    {
        string padded = base64Url.Length % 4 == 0
            ? base64Url : base64Url + "====".Substring(base64Url.Length % 4);
        string base64 = padded.Replace("_", "/")
                              .Replace("-", "+");
        return Convert.FromBase64String(base64);
    }
}

И вот ошибка, которую я получаю.Может кто-нибудь, пожалуйста, помогите мне исправить это?

enter image description here

Это тот случай, когда ключ неправильный?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...