【问题标题】:TFS Authorization using Windows Credentials使用 Windows 凭据的 TFS 授权
【发布时间】:2016-12-26 00:38:51
【问题描述】:

我正在尝试在

上连接我的 TFS 帐户

https://xxx.visualstudio.com/DefaultCollection

如果我尝试通过浏览器,我可以访问它。我的 Windows 凭据和 TFS 凭据是相同的。我正在尝试使用我的 Windows 凭据以编程方式登录 TFS。

我正在使用的库是:- Microsoft.TeamFoundation.Client(版本 14.0.0,框架版本 4.6.0)

我不确定是否需要为此做任何其他事情,或者这么多就足够了?在 web.config 或 app.config 或其他任何地方要做些什么? 最烦人的是,在同一个解决方案中的旧项目中,一切对我来说似乎都是一样的,而且工作正常。

获取异常:-

TF30063:您无权访问https://xxx.visualstudio.com/DefaultCollection

代码:-

  public TfsTeamProjectCollection ConnectionVSO { get; set; }

  public TFSRepository()
    {
        var uri = new Uri("https://xxx.visualstudio.com/DefaultCollection");
        try
        {        
            var credentials = new AadCredential();
            var clientCredentials = new TfsClientCredentials(credentials) { AllowInteractive = false };
            TfsTeamProjectCollection teamProjectCollection = new TfsTeamProjectCollection(uri, clientCredentials);

            if (teamProjectCollection != null)
            {
                teamProjectCollection.EnsureAuthenticated();
            }
            ConnectionVSO = teamProjectCollection;
        }
        catch (Exception ex)
        {
        }
    }

我确定我遗漏了一些东西。但不确定是什么? :(

【问题讨论】:

    标签: windows authentication tfs


    【解决方案1】:

    您正在尝试连接到 VSTS,您的凭据应该存储在 Web 凭据而不是 Windows 凭据中(如果您存储了它)。

    您可以创建一个 VssConnection 实例来获取 REST 服务的 HttpClients,或者创建一个 TfsTeamProjectCollection 实例来使用 SOAP 对象模型来验证 VSTS。可以通过以下方式实现:

    • 用于 REST 服务的 Azure Active Directory 身份验证
    • REST 服务的个人访问令牌身份验证
    • Visual Studio 登录提示(Microsoft 帐户或 Azure Active 目录支持)用于 REST 服务
    • REST 服务的 OAuth 身份验证
    • 用于 SOAP 服务的 Azure Active Directory 身份验证
    • SOAP 服务的基本身份验证
    • Visual Studio 登录提示(Microsoft 帐户或 Azure Active 支持目录)用于 SOAP 服务

    详情:https://www.visualstudio.com/en-us/docs/integrate/get-started/client-libraries/samples#authenticating-visual-studio-team-services

    【讨论】:

    • 感谢 Cece 的回复。但这对我没有帮助。实际上,我的解决方案中有两个 Web 项目。第一个是使用公共服务项目调用 VSO TFS 的旧版本(Web 表单中的预编写代码)。那工作正常。但是我在解决方案中添加了一个新的 Web 项目 (MVC),并且该项目也使用相同的服务项目来调用 VSO TFS。那是无权这样做的。除了调用项目外,一切都相同。我也匹配了两个项目的 web.config。我在环境中遗漏了什么?
    • 旧项目和新项目是否使用相同的凭证?报错前会提示登录吗?
    • 是的,他们在同一个解决方案中。唯一的区别是,旧项目在 MVC 上,新项目是 .net Core。经过所有的调查,我开始知道 Core 中用于 Active Directory 和 TFS 客户端的库是不同的。我找不到要使用的示例或类名。
    • 我已经弄清楚我的错误了。我的不是 Web 应用程序。它的 Web API 应用程序。我们访问api时它没有用户认证。我需要弄清楚如何在 web api 中对用户进行身份验证。抱歉@cece-msft 误导了你。
    • 有没有办法将凭据从 HttpContext.User.Identity 传递给 TFS(在上面的代码中)?我可以从此对象访问用户详细信息,但我需要同一用户在 TFS 上进行身份验证。请回复。谢谢。
    【解决方案2】:

    这根本不是代码问题。一切都很好。这是我的代码存储库的问题。我更改了我的代码在硬盘驱动器上的映射路径并获得了最新的代码并且它有效。奇怪但真实:(!!现在很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-19
      • 1970-01-01
      • 1970-01-01
      • 2019-01-13
      • 2014-03-18
      • 2019-07-05
      • 2018-08-22
      相关资源
      最近更新 更多