为什么 HTTP 基本身份验证可以使用 `git -c http.extraHeader="Authorization: Basic <base64>"` 来工作,但在直接将凭据放入 URL 时却不能工作?

Shu*_*eng 7 git version-control http basic-authentication

我有以下用于访问存储库的“虚拟”凭据(用户名和 PAT):

bd6164:o6g5xae5fmqeqdbjatdfjichdk55lweq4jxyt2jvwtjuzxdwwgxa
Run Code Online (Sandbox Code Playgroud)

现在,根据 MS 文档,我应该向gitusing提供这些凭据git -c http.extraHeader="Authorization: Basic <base64>" ...,这会导致身份验证成功。

git但是,如果我直接在 URL 中提供这些凭据:

https://bd6164:o6g5xae5fmqeqdbjatdfjichdk55lweq4jxyt2jvwtjuzxdwwgxa@azuredevops.example.net

然后认证失败。

通常,当我使用 时git,我可以将我的凭据直接放入 URL 中以成功进行身份验证,那么为什么会遇到这些不一致的情况呢?一般来说,URL 中的凭据是否不会转换为 Base64 并在“Authorization: Basic”HTTP 标头中发送?

以下是 MS 提供的有关如何使用 PAT 的文档git

https://learn.microsoft.com/en-us/azure/devops/organizations/accounts/use-personal-access-tokens-to-authenticate?view=azure-devops&tabs=preview-page#use-a-pat

作品

# git -c http.extraHeader="Authorization: Basic YmQ2MTY0Om82ZzV4YWU1Zm1xZXFkYmphdGRmamljaGRrNTVsd2VxNGp4eXQyanZ3dGp1enhkd3dneGE=" clone https://azuredevops.example.net/Main/MyProj/_git/MyRepo
Run Code Online (Sandbox Code Playgroud)

失败

# git clone https://bd6164:o6g5xae5fmqeqdbjatdfjichdk55lweq4jxyt2jvwtjuzxdwwgxa@azuredevops.example.net/Main/MyProj/_git/MyRepo
Run Code Online (Sandbox Code Playgroud)

LeG*_*GEC 0

git看起来像是git 凭证管理器和宣布支持 NTLM 的服务器之间的交互存在问题。

在github上发现这个问题:

  • OP 表示,他通过在凭据管理器中手动设置目标域的登录名/密码解决了该问题,
  • 维护者建议也尝试git config credential.authority basic在 git config 中进行设置