kkm*_*kkm 3 git libcurl http-authentication spnego
简介:我使用Git for Windows 2.5.1对Kerbesized Git服务器进行身份验证.当我在表单中使用URL时https://el2-gitlab.sa.c/kkm/GrammarTools.git,Git甚至不会尝试协商身份验证,并要求输入用户名和密码.强制Git使用SPNEGO的一个工作是在URL本身中提供空的用户名和密码,如https://:@el2-gitlab.sa.c/kkm/GrammarTools.git.在这种情况下,Git愉快地使用现有的Kerberos票证进行身份验证.
我是否可以配置Git来尝试SPNEGO而无需调整远程URL?
更多细节.我花了很多时间试图解决问题.首先,我尝试在.gitconfig中提供一个空的用户名,但无济于事:
[credential "https://el2-gitlab.sa.c"]
username = ''
Run Code Online (Sandbox Code Playgroud)
我没有遇到过关于反向问题的问题,当Git在尝试和未通过协商后拒绝恢复为Basic时,但确认行为在2.3.1中已经改变.
使用空用户名和密码响应提示没有帮助,这与我在SO上可以找到的一些建议相反(但它们可能是2.3.1版之前的日期).
最后,详细的libcurl输出(这里删节)显示Git确实尝试了基本身份验证并完全放弃了Negotiate:
$ export GIT_CURL_VERBOSE=1
$ git clone https://el2-gitlab.sa.c/kkm/GrammarTools.git kerbtest
Cloning into 'kerbtest'...
* Couldn't find host el2-gitlab.sa.c in the _netrc file; using defaults
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
> GET /kkm/GrammarTools.git/info/refs?service=git-upload-pack HTTP/1.1
Host: el2-gitlab.sa.c
User-Agent: git/2.5.1.windows.1
< HTTP/1.1 401 Unauthorized
< Status: 401 Unauthorized
< Www-Authenticate: Basic realm=""
< Www-Authenticate: Negotiate
<
* Connection #0 to host el2-gitlab.sa.c left intact
Username for 'https://el2-gitlab.sa.c':
Run Code Online (Sandbox Code Playgroud)
另外可能感兴趣的是Git客户端在响应票证之前第二次在401上重试未经身份验证的请求:
$ git clone https://:@el2-gitlab.sa.c/kkm/GrammarTools.git kerbtest
Cloning into 'kerbtest'...
* Couldn't find host el2-gitlab.sa.c in the _netrc file; using defaults
> GET /kkm/GrammarTools.git/info/refs?service=git-upload-pack HTTP/1.1
Host: el2-gitlab.sa.c
User-Agent: git/2.5.1.windows.1
< HTTP/1.1 401 Unauthorized
< Status: 401 Unauthorized
< Www-Authenticate: Basic realm=""
< Www-Authenticate: Negotiate
* Connection #0 to host el2-gitlab.sa.c left intact
* Issue another request to this URL: 'https://:@el2-gitlab.sa.c/kkm/GrammarTools.git/info/refs?service=git-upload-pack'
* Couldn't find host el2-gitlab.sa.c in the _netrc file; using defaults
> GET /kkm/GrammarTools.git/info/refs?service=git-upload-pack HTTP/1.1
Host: el2-gitlab.sa.c
User-Agent: git/2.5.1.windows.1
< HTTP/1.1 401 Unauthorized
< Status: 401 Unauthorized
< Www-Authenticate: Basic realm=""
< Www-Authenticate: Negotiate
<
* Issue another request to this URL: 'https://:@el2-gitlab.sa.c/kkm/GrammarTools.git/info/refs?service=git-upload-pack'
* Couldn't find host el2-gitlab.sa.c in the _netrc file; using defaults
> GET /kkm/GrammarTools.git/info/refs?service=git-upload-pack HTTP/1.1
Host: el2-gitlab.sa.c
Authorization: Negotiate YIIGtg[ .... trimmed ... ]
User-Agent: git/2.5.1.windows.1
< HTTP/1.1 200 OK
Run Code Online (Sandbox Code Playgroud)
git 2.8(2016年3月)应该缓解这个问题,并在http身份验证期间强制使用空的用户名和密码:
见brian m的提交121061f(2016年2月15日).卡尔森(bk2204).
(由Junio C gitsterHamano合并- -在65ba75b承诺,2016年2月24日)
http:添加选项以尝试无用户名的身份验证使用Kerberos执行GSS-Negotiate身份验证不需要指定用户名或密码,因为该信息已包含在故障单本身中.
但是,libcurl如果未提供用户名和密码,则拒绝执行身份验证.添加一个选项,
http.emptyAuth它提供libcurl一个空的用户名和密码,以使其无论如何都能尝试身份验证.
该git config文件会提到:
http.emptyAuth:
Run Code Online (Sandbox Code Playgroud)
在不寻求用户名或密码的情况下尝试身份验证.
这可用于尝试GSS-Negotiate身份验证,而无需在URL中指定用户名,因为libcurl通常需要用户名进行身份验证.
Git 2.10.2(Octobre 2016)将改善这一点.
请参阅David Turner()提交的5275c30(2016年10月4日).(由Junio C Hamano合并- -在c6400bf的承诺中,2016年10月17日)csusbdt
gitster
http: http.emptyauth应该允许空(不仅仅是NULL)用户名在较新版本的libcurl中使用Kerberos身份验证时,
CURLOPT_USERPWD必须将其设置为值,即使它是空值.该值永远不会发送到服务器.
以前版本的libcurl不需要设置此变量.
一些用户表达空用户名/密码的一种方式是http://:@gitserver.example.com,http.emptyauth旨在支持.
另一个相当的URL是http://@gitserver.example.com.
后者导致用户名为零长度,而不是NULL用户名,但CURLOPT_USERPWD仍需要设置(如果http.emptyauth已设置).
这样做.
当服务器仅支持单一身份验证方法时,Git 2.13(2017年第二季度)将减少HTTP上的身份验证往返.
请参阅提交40a18fc(2017年2月25日),并由Jeff King()提交840398f(2017年2月22日).
帮助:Johannes Schindelin().(由Junio C Hamano合并- -在提交92718f5,2017年3月10日)peffdscho
gitster
http:添加"auto"模式http.emptyauth
http.emptyauth需要指定此变量()以使某些类型的非基本身份验证工作,但理想情况下,这对于每个人来说都是开箱即用的.但是,
1默认情况下,将其设置为" "会为无效的情况引入额外的往返.我们最终发送了一个虚假的空凭证,服务器拒绝."自动"模式应该使其开箱即用,不会导致人们进入仅限基本服务器的额外往返.
| 归档时间: |
|
| 查看次数: |
1769 次 |
| 最近记录: |