Azure Devops OnPremise,致命:克隆 Git 存储库时身份验证失败

Posted

技术标签:

【中文标题】Azure Devops OnPremise,致命:克隆 Git 存储库时身份验证失败【英文标题】:Azure Devops OnPremise, fatal: Authentication failed for when cloning Git repo 【发布时间】:2020-10-24 05:47:15 【问题描述】:

使用 OnPremise Azure Devops 2019 服务器我正在尝试通过在 ProcessInfo 中调用以下 git 命令以编程方式克隆 git 存储库:

clone https://username:PATTOKEN@DEVOPSSERVERDOMAIN/TEAMPROJECT/_git/PROJECT

这里是c#代码:

  var gitInfo = new ProcessStartInfo
                    
                        CreateNoWindow = true,
                        RedirectStandardError = true,
                        RedirectStandardOutput = true,
                        FileName = pathToGitExe
                    ;

Process gitProcess = new Process();
                gitInfo.Arguments = theCloneCommand
                gitInfo.WorkingDirectory = workingFolder;
                gitProcess.StartInfo = gitInfo;
                gitProcess.Start();

但我不断收到错误

Cloning into 'PROJECT'...
fatal: Authentication failed for 'DEVOPSSERVERDOMAIN/TEAMPROJECT/_git/PROJECT'

是否未正确使用 PAT?任何建议

【问题讨论】:

嗨,您有没有机会尝试将额外的标头添加到 git 命令中,如下面的答案所述,效果如何? 嗨@LeviLu-MSFT 谢谢!我正在测试它,今天我会告诉你! 【参考方案1】:

如果为 Azure Devops 服务器启用 IIS 基本身份验证,则 PAT 无效。见Enabling IIS Basic Authentication invalidates using Personal Access Tokens。

正如上面文档中所说,您需要在 Git 请求中添加一个额外的标头,其中包含“user:PAT”的 base 64 编码:

git -c http.extraheader='Authorization: Basic [base 64 encoding of "user:PAT"]' ls-remote http://tfsserver:8080/tfs/DefaultCollection/_git/projectName

您可以使用以下 poweshell 脚本对用户名和 PAT 进行 Base64 编码:

$MyPat = 'yourPAT'
$B64Pat = [Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes("user:$MyPat"))

或使用 C# 代码:

Convert.ToBase64String(
                    System.Text.ASCIIEncoding.ASCII.GetBytes(
                        string.Format("0:1", "user", personalaccesstoken))));

有关详细信息,请参阅文档here。

您可以尝试使用您的用户名和密码而不是 PAT 作为身份验证:

git clone https://username:password@DEVOPSSERVERDOMAIN/TEAMPROJECT/_git/PROJECT
#if your password or username contain @ replace it with %40

【讨论】:

嗨 @LeviLu-MSFT 我用 http.extraheader 试过了,所以 gitInfo.Arguments = "-c http.extraheader='Authorization:Basic TheEncodedPAT' ls-remote TheServerUrl" 但我得到了以下错误 git: 'TheEncodedPAT'' 不是 git 命令。请参阅“git --help”。 使用 processinfo 参数和字符串属性可能存在问题【参考方案2】:

据我所知,您应该尝试不使用username 的克隆。

https://github.com/MicrosoftDocs/azure-devops-docs/issues/2455

https://<PAT>@mydomain.visualstudio.com/myproject/_git/myrepo

【讨论】:

嗨@AlexAIT 我尝试了你的建议,但我收到了致命错误:无法访问“UrlToProject”:SSL 证书问题:无法获取本地颁发者证书 对我来说感觉像是向前迈进了一步。此问题通常指向无法验证的自签名证书。在这种情况下,有一些解决方法,例如禁用验证,例如:confluence.atlassian.com/bitbucketserverkb/… 如果您专门查找此错误,则可以在线获取更多信息。 我最终设置了这里建议的 sChannel 属性:***.com/questions/23885449/… 所以不需要 PAT 只需调用命令 git config --global http.sslbackend schannel

以上是关于Azure Devops OnPremise,致命:克隆 Git 存储库时身份验证失败的主要内容,如果未能解决你的问题,请参考以下文章

SSL 证书问题:无法获取本地颁发者证书 AZURE DEVOPS

如何将 Azure DevOps Extension for Azure CLI 与 Azure DevOps Server 一起使用?

Azure DevOps系列Azure DevOps构建.NET EFCore应用程序

azure devops cloud 和 azure devops server 2019 之间的区别

如何从 Azure Devops 服务器迁移到 Azure Devops 服务中的现有组织

Tfs / Azure DevOps 客户端库合并 Azure DevOps 分支上的冲突解决