Как программно проверить целостность CDN в .NET Core? - PullRequest
0 голосов
/ 21 сентября 2018

Задача

Я пытаюсь выяснить, как создать хэш в ASP.NET Core 2.1, который равен строке хеша в атрибуте integrity элемента html <script>:

    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" 
            integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" 
            crossorigin="anonymous"></script>

Код

Это то, что у меня сейчас есть:

[Fact(DisplayName = "jQuery integrity")]
public async Task jQuery()
{
    var result = await this.Client.GetAsync("https://code.jquery.com/jquery-3.3.1.slim.min.js");
    byte[] content = Encoding.UTF8.GetBytes(await result.Content.ReadAsStringAsync());
    byte[] hash = SHA384.Create().ComputeHash(content);

    Assert.Equal(
        expected: "q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo",
        actual: Convert.ToBase64String(hash));
}

НоСбой Assert.Equals:

Ожидаемый: q8i / X + 965DzO0rT7abK41JStQIAqVgRVzpbzo5smX ···

Фактический: w4 / 2hcGpax1pNE5nZ3cR0 * * 10 * * 10 * 10Вопрос

Что именно мне нужно для хэширования?Как получить правильную строку хеша, чтобы я мог сравнить ее с той, которая используется в HTML?Заранее спасибо:)

1 Ответ

0 голосов
/ 23 сентября 2018

Я смог решить проблему, используя new HttpClient() вместо предварительного создания HttpClient, введя WebApplicationFactory<TEntryPoint> в мой тестовый класс и вызвав CreateClient как рекомендовано в документах MSDN и учебниках Channel 9.

Однако было бы неплохо узнать , почему эти два экземпляра HttpClient ведут себя по-разному?

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