如何以编程方式测试 .NET Core 中的 CDN 完整性?
How do I programmatically test CDN integrity in .NET Core?
任务
我想弄清楚如何在 ASP.NET Core 2.1 中创建一个散列,它等于 html <script>
元素的 integrity
attribute 中的散列字符串:
<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 失败了:
Expected: q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smX···
Actual: w4/2hcGpax1pNE5nZ3cA34ExOY5Yr14zrL0DQdd7x···
问题
我到底需要哈希什么?如何检索正确的哈希字符串,以便将其与 HTML 中使用的字符串进行比较?提前致谢:)
PS:如果你问自己为什么我要完成这个:只是出于好奇。我主要想检查 CDN 是否存在,因此如果它不可用,我的构建过程会自动抛出错误。是的,我使用了 <script>
元素的后备功能,但这就是我担心我不会注意到 CDN 缺失的原因。
我能够通过使用 new HttpClient()
而不是解决问题
之前按照 MSDN 文档和第 9 频道教程中的建议创建 HttpClient
via injecting the WebApplicationFactory<TEntryPoint>
into my test class and calling CreateClient
。
但是,很高兴知道为什么这两个 HttpClient 实例表现不同?
任务
我想弄清楚如何在 ASP.NET Core 2.1 中创建一个散列,它等于 html <script>
元素的 integrity
attribute 中的散列字符串:
<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 失败了:
Expected: q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smX···
Actual: w4/2hcGpax1pNE5nZ3cA34ExOY5Yr14zrL0DQdd7x···
问题
我到底需要哈希什么?如何检索正确的哈希字符串,以便将其与 HTML 中使用的字符串进行比较?提前致谢:)
PS:如果你问自己为什么我要完成这个:只是出于好奇。我主要想检查 CDN 是否存在,因此如果它不可用,我的构建过程会自动抛出错误。是的,我使用了
<script>
元素的后备功能,但这就是我担心我不会注意到 CDN 缺失的原因。
我能够通过使用 new HttpClient()
而不是解决问题
之前按照 MSDN 文档和第 9 频道教程中的建议创建 HttpClient
via injecting the WebApplicationFactory<TEntryPoint>
into my test class and calling CreateClient
。
但是,很高兴知道为什么这两个 HttpClient 实例表现不同?