【问题标题】:Authenticating to Azure Devops Git repo对 Azure Devops Git 存储库进行身份验证
【发布时间】:2020-05-04 15:08:20
【问题描述】:

我们正在开发一个系统,以自动将生成的项目提交到位于 Azure Devops 中的 Git 存储库中。我们想为此使用 libgit2sharp。我们希望用户使用他们的 Microsoft 帐户进行身份验证,从身份验证请求中获取访问令牌 (jwt) 并将其用作身份验证手段。但我们似乎无法让它发挥作用。

在另一篇文章中,我阅读了 2 种其他身份验证方法: 1. 替代帐户。 2. 个人访问令牌,PAT。两者都在您的 devops 帐户的个人资料部分制作。

我可以让替代帐户完美运行,但这不是我们的首选路线,因为它需要用户采取额外的行动。 PAT 似乎对我不起作用,并向我抛出一个错误,即“重定向或身份验证重放次数过多”。我认为这是因为在 Microsoft 帐户上启用了两因素身份验证。

是否支持在启用 2FA 的 LibGit2Sharp 中使用访问令牌(jwt)?

using (var repo = new Repository({repo location}))
            {
                foreach (var file in file)
                {
                    repo.Index.Add(file.Path);
                    repo.Index.Write();
                }

                var author = new Signature("{name}", "{name}", DateTime.Now);
                var committer = author;

                repo.Commit("Here's a commit i made!", author, committer);

                var options = new PushOptions();
                options.CredentialsProvider = (url, user, cred) => new UsernamePasswordCredentials() { Username = "{username}", Password = "{password}" };

                repo.Network.Push(repo.Branches["master"], options);
            }

【问题讨论】:

    标签: c# asp.net libgit2sharp


    【解决方案1】:

    个人访问令牌 (PAT) 绕过 MFA,所以这可能不是您遇到的错误。 PAT 是您的最佳选择,在推送时,您需要本地 Git 存储库的 remote-url 如下:

    https://pat:{PAT_HERE}@dev.azure.com/...
    

    例如

    https://pat:gaakbfootuial7ksj4uv55o52335tyhhaasbqdvbg5xgyy33t754@dev.azure.com/auroraloop/devenv/_git/devenv
    

    提示:

    • PAT 将获取生成它的 Azure DevOps 用户的权限,因此该用户必须具有对 repo 的贡献权限。
    • 无法自动创建 PAT,您必须将其预先存储在某处,如果您不想对此进行硬编码(您不应该)考虑使用 Azure Key Vault 来存储和检索我确定他们有 c# 库。

    您的代码中的options.CredentialsProvider 部分可能与我提到的remote-url 完全相同,请尝试如下设置:

    options.CredentialsProvider = (url, user, cred) => new UsernamePasswordCredentials() { Username = "pat", Password = "{PAT_HERE}" };
    

    硬编码 PAT 以进行测试,如果成功,请查看 Azure Key Vault 方法。

    【讨论】:

    • 您知道是否可以使用从 Microsoft 登录提供程序收到的 jwt?因为这就是我们正在寻找的。 PAT 只是有制作它的额外障碍,然后我们需要向人们解释,他们必须去 devops 来创建它,然后它到期,他们必须再次创建它。这就是为什么我们只想使用我们从登录到我们应用程序中内置的 Microsoft 登录提供程序时收到的令牌,因此它对用户更加友好。那么这也可能吗?
    • SDK 通常会为 身份验证 解决这个令人头疼的问题,但由于您对 Git 操作特别感兴趣,我认为 jwt 令牌不会起作用。从我的角度来看,这是两件不同的事情,jwt 令牌在完成登录表单后针对 Azure DevOps Services 对用户进行身份验证。我相信 Git 操作是在 授权 的基础上发生的,这意味着 jwt 令牌不再出现在图片中,因为用户已经过身份验证,Git 只是要求它看到的帐户的适当权限。不过我可能错了。
    • 您现在实际上可以通过编程方式生成 PAT。 docs.microsoft.com/en-us/rest/api/azure/devops/tokens/pats/…
    猜你喜欢
    • 1970-01-01
    • 2020-10-24
    • 2020-10-19
    • 2019-01-06
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    相关资源
    最近更新 更多