LibGit2Sharp如何推送kerberos身份验证?

时间:2015-02-27 12:36:24

标签: kerberos git-push libgit2sharp

我需要从Intranet应用程序(Windows环境)推送分支。一个团队的一些用户可以执行此操作。 Git本地存储库托管在Web服务器上,远程托管在另一台服务器上。网址协议为 https ,我们使用 Kerberos 身份验证。我不希望应用程序的用户输入他们的Windows用户ID和密码。

因此,作为初始化步骤,我根据用户配置本地存储库:

        var m_Repo = new Repository(repoFldPathName);
        Configuration config = m_Repo.Config;
        config.Set<string>("user.name", m_UserName);
        config.Set<string>("http.sslVerify", "false");
        string url = string.Format(https://{0}@my-host.fr/folder/repo_name.git, m_UserName);
        Remote remote = m_Repo.Network.Remotes["origin"];
        if (remote != null)
        {
            if (remote.Url != url)
            {
                m_Repo.Network.Remotes.Remove("origin");
                m_Repo.Network.Remotes.Add("origin", url);
            }
        }
        else
            m_Repo.Network.Remotes.Add("origin", url);

现在是时候推动分支机构&#34;掌握&#34;我准备推(正如我在另一篇文章中看到的那样):

        PushOptions options = new PushOptions();
        Remote remote = m_Repo.Network.Remotes["origin"];
        Branch branch = m_Repo.Branches["master"];
        if (branch.Remote == null)
            m_Repo.Branches.Update(branch,
                b => b.Remote = remote.Name,
                b => b.UpstreamBranch = branch.CanonicalName);
        options.CredentialsProvider = (_url, _user, _cred) => new DefaultCredentials();
        m_Repo.Network.Push(branch, options);

执行几分钟后,我得到了这个例外:

  LibGit2Sharp.LibGit2SharpException was unhandled by user code
  HResult=-2146233088
  Message=Failed to receive response: La requête doit être renvoyée

  Source=LibGit2Sharp
  StackTrace:
       à LibGit2Sharp.Core.Ensure.HandleError(Int32 result)
       à LibGit2Sharp.Core.Ensure.ZeroResult(Int32 result)
       à LibGit2Sharp.Core.Proxy.git_remote_push(RemoteSafeHandle remote, IEnumerable`1 refSpecs, GitPushOptions opts, Signature signature, String reflogMessage)
       à LibGit2Sharp.Network.Push(Remote remote, IEnumerable`1 pushRefSpecs, PushOptions pushOptions, Signature signature, String logMessage)
       à LibGit2Sharp.Network.Push(Remote remote, String pushRefSpec, PushOptions pushOptions, Signature signature, String logMessage)
       à LibGit2Sharp.NetworkExtensions.Push(Network network, IEnumerable`1 branches, PushOptions pushOptions)
       à LibGit2Sharp.NetworkExtensions.Push(Network network, Branch branch, PushOptions pushOptions)
       à CDM.ESD1_WSGINSTALL.Business.GitRepo.Push(brEnum brName) dans c:\PRIV\Projects\ESD1\ESD1_WSGINSTALL\ESD1_WSGINSTALL.Business\GitRepo.cs:ligne 72
       à CDM.ESD1WSGINSTALL.Commands.CharteView.DoBuildRPM(String id) dans c:\PRIV\Projects\ESD1\ESD1_WSGINSTALL\ESD1_WSGINSTALL\App_Code\Commands\CharteViewActivity\CharteView.cs:ligne 262
  InnerException: 

感谢您的帮助

1 个答案:

答案 0 :(得分:2)

我认为DefaultCredentials类型就是你所追求的。

正如 xml documentation 所述,&#34;一个凭据对象,它将提供&#34;默认&#34;凭证(登录用户信息)通过NTLM或SPNEGO身份验证。&#34;

PushOptions.CredentialsProvider设置为以下内容应该可以解决问题

CredentialsProvider = (_url, _user, _cred) => new DefaultCredentials()

更新

  

当我在我的Windows机器上使用Git Extensions推送分支时,(git push origin master --tag)a&#34; OpenSSH&#34;弹出窗口声称我的密码

可悲的是,LibGit2Sharp还没有支持SSH。我建议您订阅未解决的问题 #852 以获得有关其进展的通知。