git - libgit2sharp usernamepasswordcredentials 似乎忽略了用户名?
问题描述
我们正在使用 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>
我使用有效的用户名和密码,一切都很好,很花哨,它返回一个 oItems 对象,它的 .Count > 0 ...快乐的日子。因此,我尝试使用一些无效值来查看会发生什么...无效的 URL 返回此遥控器从未连接过- 快乐的日子!所以我尝试使用正确的 URL 但无效的用户名....哇等等....它仍然返回一个有效的 oItems 对象???当我破坏密码时,它再次返回this remote has never connected,但似乎用户名被完全忽略了。
这是 dev.azure.com 的 GIT 方式中的错误吗?这是我需要担心的事情吗?如果无论如何都被忽略,为什么还要有一个“用户名”呢?
解决方案
这是 dev.azure.com 的 GIT 方式中的错误吗?如果它 > > 无论如何都会被忽略,为什么还要有一个“用户名”?
不,这是预期的操作,因为您正在使用Git Credential Manager (GCM)
生成密码。
实际上,它不是官方密码。单击按钮后它生成的是个人访问令牌Generate Git Credentials
,其范围仅限于Repos(Read&Write)
.
这时候,去Security
(https://dev.azure.com/{orgname}/_usersSettings/tokens)页面,你会看到有一个令牌被添加,Token name
就像git: https://dev.azure.com/{orgname} on {machine platform}.
对于个人访问令牌,我相信您知道 PAT 令牌在生成时与单个用户帐户相关联。换言之,使用 PAT 作为授权方式时,您不需要额外输入用户名。这就是为什么用户名无论如何都会被忽略的原因。
您还可以查看此文档以获取Git 凭证管理器的工作原理
这是我需要担心的事情吗?
把它当作密码来保密不会造成太大的问题。
大多数时候,你不需要担心。因为这个令牌很快就会过期,不会超过1天。
此外,正如我上面提到的,此令牌的范围仅适用于经许可的Repos 。Read&Write
即使有人不小心得到了这个token,也不能在Repos之外进行操作。
推荐阅读
- android - Android-Iconics - 如何以编程方式设置图标
- c# - 处理wpf中所有窗口的关闭事件
- javascript - 如何通过 jquery 中的 RESTful URL 映射更改 url
- android - 在最多 5 行的水平回收视图中显示数字
- python - Beautifulsoup 打印相同的类名不同的出现
- javascript - A-Frame getObject3D('mesh') 多次尝试返回未定义
- maven - jQAssistant - scanInclude Maven 工件
- ruby-on-rails - 如何跨控制器中的多个表获取(匹配)数据?
- laravel - Laravel + Vue $request->hasFile('image') 返回 null
- javascript - 在本机反应中将容器组件与表示组件分离