如何使用 Windows 身份验证在 Azure DevOps Server 中针对 IIS 运行 Playwright .NET 测试

问题描述 投票:0回答:1

我正在尝试让我们的 Playwright 测试在我们的 CI/CD 管道中运行。我发现关于如何针对我们的具体情况执行此操作的文档很少。以下是关键组件:

  • 代码是.NET Framework 4.7.2 MVC
  • 构建服务器Azure DevOps Server 2019
  • IIS 10 是我们的网络服务器
  • Windows 身份验证用于 IIS
  • CI/CD 管道是用 YAML 编写的
    • 部署管道是经典的,因为 2019 年不支持 YAML

因此,我可以将测试指向我们的开发 IIS 服务器,并从 Visual Studio 2022 本地运行它们,没有任何问题。但是,当我在管道中运行它们时,我收到“401 Unauthorized”错误。看来这显然是由于我本地使用 my Windows Auth 凭据,而构建服务器显然没有我的凭据。

所以我的问题是:在 Azure DevOps Server 管道中针对使用 Windows 身份验证的 IIS 网站运行 Playwright 测试有哪些策略?”

就其价值而言,以下是我找到的参考文献,但它们要么没有答案,要么已关闭而没有解决方案:

我只是还没有看到太多关于如何使这些测试发挥作用的文档或指南。最后,出于安全原因,我们需要启用 Windows 身份验证并将其作为我们网站的唯一身份验证机制。这并不是真正规避安全的选择。也许这是不可能的,但我希望它在某个地方明确地被调用。

谢谢, 迈克尔

iis windows-authentication playwright asp.net-mvc-5.2 azure-devops-server-2019
1个回答
0
投票

根据您的描述,构建服务器和Web服务器位于两台不同的机器中。

默认情况下,浏览器将启用 Windows 集成身份验证 进行身份验证。它将自动使用当前用户登录网站。

在您的情况下,它将直接使用Build Server上的用户访问Web Server并导致401错误。

要解决此问题,您需要先禁用 Windows 集成身份验证

  1. 通过菜单栏导航至工具 -> Internet 选项 -> 安全

  2. 选择本地内联网并单击“自定义级别”按钮

  3. 滚动到窗口底部的“用户身份验证”部分,选择“提示输入用户名和密码”

  4. 单击“确定”、“应用”和“确定”以保存更改。

例如:

请参阅此文档:如何从浏览器禁用集成 Windows 身份验证 (IWA)

然后您可以在 Playwright 项目中设置 IIS Web Server 的 Windows 用户凭据。请参阅此文档:HTTP 身份验证

例如:

using var context = await Browser.NewContextAsync(new()
{
    HttpCredentials = new HttpCredentials
    {
        Username = "bill",
        Password = "pa55w0rd"
    },
});
var page = await context.NewPageAsync();
await page.GotoAsync("https://example.com");

这里有一个具有类似要求的票证:Prevent SSO with Playwright

另一方面,您也可以考虑在 IIS Web 服务器上设置 自托管代理

在这种情况下,您不需要对代码进行任何更改。它将使用 IIS Web 服务器上的用户访问 Azure Pipeline 中的网站。

© www.soinside.com 2019 - 2024. All rights reserved.