处理升级Gerrit后REST API无法使用

背景:

升级Gerrit,从2.13到3.2

遇到问题:

升级到新版后,rest api无法使用了,要么提示401,要么提示 Unauthorized

官方文档上面,说使用basic auth就能直接连上rest api。匿名用户可以直接查询接口,登录用户,在host后面增加"/a"后缀。

但实际上,我匿名访问,是会报401错误的。

而登录后,又报Unauthorized。

使用htpasswd设置的密码不行,使用Gerrit生成的随机密码也不行。

 

原因分析:

经过一番排查后,发现LDAP认证方式下,直接使用ldap账户和密码,是可以使用Gerrit 的rest api的。

而htpasswd设置的密码,是通过Nginx或者Apache进行鉴权的,也就是登录网页的时候,那个弹窗的处理,是Nginx处理的。这时候根本就没有进入到Gerrit,具体可以看官方文档,以及Gerrit的配置,是没有任何指向htpasswd生成的密码文件的。

登录Gerrit Web的时候,使用htpasswd的密码可以进入。但使用rest api的时候,Gerrit也会对账户密码进行校验。这点和web登录是不一样的,问题就出在这里。

使用htpasswd的密码,用postman登入gerrit_site.com/a/projects/时,如果htpasswd密码不对,会有401错误报出来,此时是Nginx报的。输入htpasswd的账户密码,不报401错误了,但返回Unauthorized,此时是Gerrit返回的。

要想登入Gerrit REST API,就得密码正确,也就是要同时满足htpasswd和Gerrit的密码。只有这两个密码一样,才能通过。

解决方案:

方法一:统一htpasswd和Gerrit的HTTP密码。

如果可以修改admin密码(如果admin不方便改密码则新建一个账户,并配置成管理员),则先重置(或者获取已有的)admin账户的Gerrit HTTP密码,在web页面的设置页-HTTP选项上生成。

然后在服务器上执行htpasswd -m gerrit.passwd admin,输入Gerrit的HTTP密码。这样htpasswd的密码和Gerrit的HTTP密码就一样的。

此时admin账户,使用Gerrit的HTTP密码,即可使用postman使用basic auth方式,进行gerrit_site.com/a/projects/的查询和put操作了。

由于Gerrit的HTTP是随机生成的一长串密码,不易使用,可以把密码还原会admin原本的密码。

1、使用Gerrit rest api,写入旧密码到Gerrit上:

具体见:https://gerrit-review.googlesource.com/Documentation/rest-api-accounts.html#set-http-password

2、在服务器上操作htpasswd -m gerrit.passwd admin,输入旧密码

这时候,htpasswd和Gerrit的密码就统一设置成原本的旧密码了。

对于其他需要使用rest api的账户,可以直接使用admin账户,调用rest api,写入账户的HTTP密码到Gerrit上。

方法二:使用LDAP或者OpenID等认证方式

可以使用ldap方式,一般公司内都是会有统一的ldap服务,接入公司的ldap账户,就不存在上面的问题了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值