使用 ADAL 在 ASP.NET 上检索 Visual Studio 个联机工作项时出现身份验证问题

Authentication issue when using ADAL to retrieve Visual Studio Online work items on ASP.NET

我正在编写一个 ASP.NET 网络应用程序,它将 read/write 访问我们组织的 VSO 工作项。为了能够跟踪谁进行了哪些更改,我希望使用 Windows 身份验证对当前登录的用户进行身份验证。不幸的是,OAuth 不是一个选项,因为它在我们组织的 VSO 中被禁用。

目前我的控制器中有以下基本代码:

var client = new TfsTeamProjectCollection(new Uri("https://orgName.visualstudio.com/"));

WorkItemStore workItemStore = client.GetService<WorkItemStore>();
projectsList = workItemStore.Query(@"some query");

当我在本地 运行 时,它工作得很好。部署到服务器后,它会失败并显示 401 Unauthorized 错误。我同时启用了 Windows 身份验证和 ASP.NET 模拟。模拟似乎有效,因为

System.Web.HttpContext.Current.User.Identity.Name;
System.Web.HttpContext.Current.Request.LogonUserIdentity.Name;
WindowsIdentity.GetCurrent().Name;
System.Security.Principal.WindowsIdentity.GetCurrent().Name;

all return my DOMAIN\username(禁用ASP.NET模拟时,最后两个return NT AUTHORITY\SYSTEM如预期)。

我觉得奇怪的是,当我实际为 TfsTeamProjectCollection 提供像这样的基本身份验证参数时

var client = new TfsTeamProjectCollection(new Uri("https://orgName.visualstudio.com/"), new NetworkCredential("DOMAIN\username", "password"));

它仍然失败(在本地主机上工作,部署时失败)。

我已经寻找了很多解决方案,但似乎没有一个对我有用。作为参考,我的 Web.config 有以下几行:

<system.webServer>
  <validation validateIntegratedModeConfiguration="false"/>
</system.webServer>
<system.web>
  <compilation debug="true" targetFramework="4.5.2" />
  <httpRuntime targetFramework="4.5.2" />
  <authentication mode="Windows" />
  <identity impersonate="true"/>
  <authorization>
    <deny users="?" />
  </authorization>
</system.web>

VSTS 不支持 Windows 身份验证。所以你需要在你的应用程序中添加代码来处理身份验证。

VSTS 支持以下三种身份验证类型:

  1. 基本身份验证:您需要启用备用身份验证凭据或使用 Personal Access Token 然后使用 NetworkCredential(basicAuthUsername, password).

  2. 微软账号认证,使用VssClientCredentials()TfsClientCredentials().

  3. 使用 Azure Active Directory 进行身份验证,使用 AadCredential().

有关详细信息,请查看此 link:Authenticating (Visual Studio Team Services)