将多个 git 个人访问令牌 (PAT) 与凭据管理器一起使用

Posted

技术标签:

【中文标题】将多个 git 个人访问令牌 (PAT) 与凭据管理器一起使用【英文标题】:Using multiple git personal access tokens (PAT) with Credential Manager 【发布时间】:2022-01-21 14:10:27 【问题描述】:

我按照 this answer 使用 GitCredentialManager,但我找不到如何使用多个个人访问令牌 (PAT) 的方法。

我有

    Windows terminal 要点https://gist.github.com/lkeersmaekers/4884d047b3b90ccd697a4d7ec21be49d dotvim 回购https://github.com/lkeersmaekers/dotvim

我创造了

    Windows terminal gist 的 PAT (创建 gists 范围) dotvim 存储库的 PAT (访问公共存储库范围)

第一次推送Windows terminal gist 时,git 按预期要求输入用户名/密码(=PAT),推送成功,我可以在 Windows 凭据管理器中看到凭据。

当随后推送 dotvim 存储库时,使用来自 Windows terminal 的存储凭据 (PAT),dotvim 推送失败。

我不确定这里的最佳做法是什么。

我可以创建一个具有足够访问权限的 PAT,而不是两个 PAT,但这样一来,我最终可能会得到一个 PAT,其中所有复选框都被选中,这似乎完全错误。 我不知道如何在 Windows 凭据管理器中拥有两个凭据,这将允许 git push 以某种方式使用正确的凭据。

【问题讨论】:

我不明白您为什么会有“选中所有复选框的 PAT”。 @matt -me 也没有,因此我的问题是如何在一台计算机上使用两个 PAT 和 git 的凭证管理器。 Git 没有凭证管理器。你做。 Git 不做授权。那是在您和远程站点之间。您可以为 Git 提供对您的凭证管理器的引用,但这不是 Git 功能。 @matt - 注意,我已经编辑了我的问题。 【参考方案1】:

您可以在这里采取几种不同的方法。一种是使用gistrepo 范围创建单个令牌并普遍使用它。该令牌确实可以访问您的所有存储库,但如果您使用凭证助手,那么它会以加密方式存储,风险应该不会太大。

由于您实际上在这里使用了两个不同的域(github.comgist.github.com),因此您可以毫无问题地使用单独的令牌。令牌存储在域的范围内,因此这里没有冲突。只需在其各自的域上使用每个凭据。

如果您想为不同的存储库使用不同的令牌,您可以通过将credential.usehttppath 设置为 true 来实现。这也可以限定为特定的 URL 模式(包括通配符),以便它仅适用于 GitHub(例如,git config --global credential.https://github.com/.usehttppath true。每个存储库将拥有自己的一组凭据,并且您可以存储尽可能多的令牌喜欢。但是,如果您有很多存储库,这可能很快就会变得不方便。

最后,如果您只想为公共和私人访问使用不同的令牌,您可以利用 GitHub 在您使用令牌时忽略用户名这一事实为 GitHub 执行此操作。因此,您可以通过在主机名前添加public@ 来克隆公共存储库(例如,私有存储库的 https://public@github.com/git/git.git) and then using private@`。Git 的凭证助手将存储单独的凭证对于这些假用户名,将使用相应的令牌。

【讨论】:

推送到gist.github.com 也使用github.com 凭据,但我将使用一个令牌来统治他们所有选项,以免使事情变得过于复杂,因此在实践中并不重要。如果您有兴趣,此(相关)信息会在以下位置跟踪输出:19:05:45.434878 ...GitCommandBase.cs:48 trace: [ExecuteAsync] **host=gist.github.com**19:05:45.543991 ...\HostProvider.cs:126 trace: [GetCredentialAsync] Looking for existing credential in store with **service=https://github.com account**=... GCM Core 可能会这样做,但 Git 凭证协议不会:它将它们视为单独的域。我认为在这种情况下,这是一个错误,您可能希望使用 wincred 作为助手。

以上是关于将多个 git 个人访问令牌 (PAT) 与凭据管理器一起使用的主要内容,如果未能解决你的问题,请参考以下文章

将 git credentialmanager 与 github 令牌一起用于 gists

从SSO中的多个系统注销(单点登录)

OAuth 客户端凭据重新颁发访问令牌与刷新令牌

Github Actions生成 secrets

再生后如何更新 Github 的 PAT?

如何设置我的本地 Git 存储库以使用我刚刚创建的新个人访问令牌? [复制]