使用libgit2sharp中的TFS PAT进行授权

时间:2018-04-05 11:53:01

标签: git tfs libgit2 libgit2sharp

我想使用LibGit2Sharp访问内部部署的TFS服务器GIT存储库。到目前为止,我只是在玩这个图书馆,我无法按照我的预期去工作。

我的第一个问题是个人访问令牌的授权。我可以使用UsernamePasswordCredentials克隆存储库,提供我的公司电子邮件和密码,但是,我找不到使用PAT的方法。我找不到任何关于它的可靠信息,所以我尝试以不同的组合使用它,比如用它替换我的密码/用户名,但我无法让它工作 - 我总是得到LibGit2Sharp.LibGit2SharpException:'太多的重定向或认证重播'。

这应该意味着凭据无效,但我确定我的令牌有效并且我授权所有范围,因此它应该能够用我的凭据做我能做的一切。是否有一个例子我可以遵循它来启动和运行?这是我当前使用的用户名和密码的解决方案:

        var co = new CloneOptions();
        co.CredentialsProvider = (_url, _user, _cred) =>
            new UsernamePasswordCredentials
            {
                Username = "username@companyname.com",
                Password = "password"
            };

        Repository.Clone(@"remoteUrl-received-from-api", "destination-folder", co);

我的另一个问题是,从这个API端点收到了哪个URL:TFS API是传递给LibGit2Sharp的正确URL?我正在使用“remoteUrl”(这是TFS Web应用程序URL)进行克隆,并且在提供用户名和密码时可以正常工作,但是,Repository.IsValid返回false。我对TFS和GIT并不熟悉,所以请原谅我在这方面完全缺乏知识。

如果我明天没有这个工作,我将不得不使用cmd.exe进程和控制台命令,我真的很想避免 - 所以任何帮助都会非常感激。

2 个答案:

答案 0 :(得分:2)

在libgit2sharp中,似乎传递令牌,因为具有空白密码的用户名特定于 GitHub 。这可能不适用于TFS / VSTS托管的git repo。

在GITHUB中查看这个相关问题:Does Git-Clone support Personal access tokens ?

对于TFS / VSTS,如果您不想使用提供公司电子邮件和密码的UsernamePasswordCredentials,则可以使用备用身份验证凭据

enter image description here

对于网址,您应该使用TFS git remoterepo网址。更多详细信息示例请参考此链接:How do you authenticate to VSTS using LibGit2Sharp?

您可以使用备用凭据对VSTS进行身份验证。以下代码显示了如何对VSTS进行身份验证并执行克隆作业。

using LibGit2Sharp;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            string surl = "https://youraccount.visualstudio.com/DefaultCollection/_git/Remoterepo";
            string lpath = "C:\\LocalPath";
            CloneOptions co = new CloneOptions();
            string un = "alternativeusername";
            string pwd = "alternativepassword";
            Credentials ca = new UsernamePasswordCredentials() {Username = un, Password = pwd };
            co.CredentialsProvider = (_url, _user, _cred) => ca ;
            Repository.Clone(surl,lpath,co);
        }
    }
}

答案 1 :(得分:1)

使用任何用户名和个人访问令牌作为密码与 Azure DevOps(VSTS)上的git 一起使用。这样,您可以将访问限制为最低限度。

假设您的CloneOptions,FetchOptions,...变量的名称为“ o”:

o.CredentialsProvider = (url, fromUrl, types) => new UsernamePasswordCredentials(){Username="Anything", Password = "Your personal access token here" };

我不知道它是否可以与TFS一起使用。