使用 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 支持以下三种身份验证类型:
基本身份验证:您需要启用备用身份验证凭据或使用 Personal Access Token 然后使用 NetworkCredential(basicAuthUsername, password)
.
微软账号认证,使用VssClientCredentials()
或TfsClientCredentials()
.
使用 Azure Active Directory 进行身份验证,使用 AadCredential()
.
有关详细信息,请查看此 link:Authenticating (Visual Studio Team Services)。
我正在编写一个 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 支持以下三种身份验证类型:
基本身份验证:您需要启用备用身份验证凭据或使用 Personal Access Token 然后使用
NetworkCredential(basicAuthUsername, password)
.微软账号认证,使用
VssClientCredentials()
或TfsClientCredentials()
.使用 Azure Active Directory 进行身份验证,使用
AadCredential()
.
有关详细信息,请查看此 link:Authenticating (Visual Studio Team Services)。