libgit2sharp usernamepasswordcredentials 似乎忽略了用户名?

libgit2sharp usernamepasswordcredentials appears to ignore username?

我们正在使用 GIT 进行部署,一切都运行良好。目前我正在编写允许客户端切换到另一个部署存储库的功能 - 毕竟我们可能会在某个时候决定从不同的位置开始部署,对吗?

我们在 Azure 中创建存储库,并在创建存储库后使用按钮生成 GIT 凭据:

所以我向用户展示了一个表单,他们可以在其中输入新的 URL、用户名和密码,然后我去检查....(vb.net 代码)

    Dim oCH As LibGit2Sharp.Handlers.CredentialsHandler = Nothing
    Dim oItems As IEnumerable(Of LibGit2Sharp.Reference) = Nothing
    Dim oCred As LibGit2Sharp.UsernamePasswordCredentials = Nothing

    Try
        oCred = New LibGit2Sharp.UsernamePasswordCredentials
        oCred.Username = tbBuildsCredential.Password
        oCred.Password = tbBuildsPassword.Password
        oCH = New LibGit2Sharp.Handlers.CredentialsHandler(Function(_url, _user, _cred) oCred)
        oItems = LibGit2Sharp.Repository.ListRemoteReferences(url:=tbBuildsRepository.Text,
                                                              credentialsProvider:=oCH)
        If oItems Is Nothing Then
            Return False
        End If
    Catch ex As Exception

(我将在最后省略错误处理和清理代码,因为它不相关)

好的 - 所以我正在测试这个,我在 azure devops 中输入了一个有效的存储库 URL:

https://<ourcompanynamehere>@dev.azure.com/<ourcompanynamehere>/<projectnamehere>/_git/<repohere>

我使用了一个有效的用户名和密码,一切都很好,很漂亮,它 returns 一个 oItems 对象,它的 .Count > 0 ...快乐的日子。所以我用一些无效的值尝试看看会发生什么......无效的URL returns 这个遥控器从未连接过 - 快乐的日子!所以我尝试使用正确的 URL 但无效的用户名....哇等等....它仍然返回一个有效的 oItems 对象???当我破坏密码时,它再次返回 此遥控器从未连接过,但用户名似乎已被完全忽略。

这是 dev.azure.com 做 GIT 的方式中的错误吗?这是我需要担心的事情吗?如果 "username" 无论如何都被忽略了,为什么还要有一个 "username"?

Is this a bug in dev.azure.com's way of doing GIT? Why have a "username" at all if it > > gets ignored anyway?

不,这是预期的操作,因为您正在使用Git Credential Manager (GCM)生成密码。

其实不是官方密码。它生成的是点击按钮Generate Git Credentials后的个人访问令牌,其范围仅限于Repos(Read&Write)

此时,进入Security(https://dev.azure.com/{orgname}/_usersSettings/tokens)页面,你会看到添加了一个token Token name 就像 git: https://dev.azure.com/{orgname} on {machine platform}.

对于个人访问令牌,我相信您已经知道 PAT 令牌在生成时绑定到单个用户帐户。换句话说,使用 PAT 作为授权方式时,您不需要额外输入用户名。这就是用户名无论如何都会被忽略的原因。

您还可以查看此文档以获取 How the Git Credential Managers works


Is this something I need to worry about?

当成密码来保密,问题不大。

大多数时候,你不需要担心。因为这个令牌很快就会过期,不会超过1天。

此外,正如我上面提到的,此令牌的范围仅限于具有 Read&Write 权限的 Repos。即使有人不小心拿到这个token,也不能在Repos之外进行操作。