gpt4 book ai didi

通过 SAML SSO 进行 Git CLI 验证

转载 作者:行者123 更新时间:2023-12-02 23:39:24 25 4
gpt4 key购买 nike

我正在尝试从该网络外部连接到在公司网络内部的计算机上运行的 self 管理的 Gitlab 服务器。

上下文

要访问此网络,用户需要通过反向代理并通过公司的 Azure AD 和 SAML 身份验证登录(下图)。对于 Gitlab Web 应用程序(图中的左侧分支)来说,这种方法效果很好:尝试访问网络时,系统会提示用户使用基于浏览器的 SSO。然后,生成的 token 将重新用于对 Gitlab 实例的用户进行身份验证,其中还设置了通过 Azure OAuth 的身份验证。

问题

问题在于使用 git cli 与 git 服务器交互(推送、 pull 等)。重定向到 SSO 会触发以下错误:

> git push origin master
fatal: unable to update url base from redirection:
asked for: https://gitserver.companyurl.com/user/repo.git/info/refs?service=git-receive-pack
redirect: https://login.microsoftonline.com/<azure_tenant_id>/saml2?SAMLRequest=<base64encoding of SSO portal>

问题

是否可以配置 git,以便在例如以下情况时触发基于浏览器的 SSO: git push,并且上述重定向不会引发异常?具体来说,以下内容是理想的:

  • 用户执行git推送
  • pop 浏览器,请求通过 Azure AD 进行单点登录
  • 请求“进入”公司网络
  • 理想情况:重复使用相同的 token 来针对 git 服务器进行身份验证。但是,使用 user:pwd 组合或访问 token 也可以。
  • git Push 请求已成功完成

我知道这在没有浏览器的 headless 系统上不起作用,这是可以接受的限制。

enter image description here

最佳答案

你所要求的是不可能的。 Git 没有办法生成浏览器(因为甚至不需要安装浏览器),即使有,它也没有办法从它生成的浏览器中提取任何 token 或凭据。

但是,如果您可以使其按照您想要的方式调用浏览器,然后发出 token ,您可能会发现自定义凭据助手很有用。有些环境也希望使用 cookie 来实现此目的,Git 可以使用 http.cookiefile 读取 Netscape 格式的 cookie。您还可以使用 http_proxy 环境变量和用户凭据设置标准代理配置,但请注意您的代理正确使用 HTTP/1.1 并且不执行任何过滤,因为损坏的代理会破坏 Git以各种微妙的方式。

我不能代表 GitLab,但我知道 GitHub 也内置了对 SAML SSO 的支持,因此不需要反向代理。在这种情况下,您可以继续使用个人访问 token 或 SSH key 来访问服务器,同时仍然需要 Web 界面的 SSO。

我应该指出,一般来说,在 Git 主机前面使用反向代理来限制访问可能会破坏自动化。您可能希望允许 SSH key 或其他某种方法来防止您的 SAML SSO 破坏与任何用户无关的自动化流程。

关于通过 SAML SSO 进行 Git CLI 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64731848/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com