Есть ли какой-либо метод для генерации значения qsh для генерации токена JWT для доступа к zephyr api? - PullRequest
0 голосов
/ 16 мая 2019

Я пытаюсь получить доступ к zapi, чтобы получить подробности теста от zephyr (Jira), используя авторизацию JWT. Но сгенерированное заявление qsh неверно, что делает JWT неверным.Есть ли альтернативный способ создания qsh в C #?

При попытке в клиенте Postman с сгенерированным значением JWT выдает ошибку, что используется неверное значение qsh, и отображает правильное значение qsh.Я жестко запрограммировал отображаемое значение (вместо динамического создания qsh) для генерации JWT, и это дает ответ об успехе.Код указан ниже:

    var canonical_path_t = "GET&" + RELATIVE_PATH_T + QUERY_STRING_T;
    var payload = new Dictionary<string, object>()
    {
        { "sub", ACCOUNT_ID },              //assign subject
        { "qsh", getQSH(canonical_path_t) },  //assign query string hash
        { "iss", ACCESS_KEY },              //assign issuer
        { "iat", iat },                     //assign issue at(in ms)
        { "exp", exp }                      //assign expiry time(in ms)
    };

    string token = JWT.JsonWebToken.Encode(payload, SECRET_KEY, JWT.JwtHashAlgorithm.HS256);

    client.DefaultRequestHeaders.Add("Authorization", "JWT " + token);
    client.DefaultRequestHeaders.Add("zapiAccessKey", ACCESS_KEY);
    client.DefaultRequestHeaders.Add("User-Agent", "ZAPI");         


   //code to generate qsh           
   static string getQSH(string qstring)
    {
        System.Security.Cryptography.SHA256Managed crypt = new 
        System.Security.Cryptography.SHA256Managed();
        StringBuilder hash = new StringBuilder();
        byte[] crypto = crypt.ComputeHash(Encoding.UTF8.GetBytes(qstring), 0, Encoding.UTF8.GetByteCount(qstring));
        foreach (byte theByte in crypto)
            {
                hash.Append(theByte.ToString("x2"));
            }

            return hash.ToString();
    }
...