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之外进行操作。
我们正在使用 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之外进行操作。