JFrog Artifactory 间歇性拒绝身份验证,403 被禁止
Posted
技术标签:
【中文标题】JFrog Artifactory 间歇性拒绝身份验证,403 被禁止【英文标题】:JFrog Artifactory intermittently rejects authentication with 403 forbidden 【发布时间】:2020-05-28 12:23:30 【问题描述】:由于一些“身份验证”问题,我很难配置 zypper
客户端(SLES 和 OpenSUSE)以在 JFrog 中使用我们的 RPM Repository
。起初,我认为这只是 zypper
和 opensuse 的问题,所以我首先专注于我们努力让 zypper 工作。 This 是上一个问题。
但是yum
客户端 (centOS) 也会时不时出现这些与身份验证相关的错误,尽管不是那么频繁。
所以我尝试使用man-in-the-middle
来看看幕后发生了什么,这是zypper
的序列:
场景 1 - 认证成功
以下是zypper refresh --repo myrepo
的序列:
(1) zypper
发送带有base64
编码的username:
的HTTP HEAD
请求:
HEAD /myapp-release-rpm/stable/myapp/2019/3/repodata/repomd.xml HTTP/1.1
Host: rpm.example.com
Authorization: Basic dXNlcm5hbWU6
User-Agent: ZYpp 17.19.0 (curl 7.60.0) openSUSE-Leap-15.1-x86_64
Accept: */*
Connection: close
(2) jfrog
响应 HTTP 401 Unauthorized
并带有 WWW-Authenticate
标头:
HTTP/1.1 401 Unauthorized
Date: Thu, 28 May 2020 08:20:04 GMT
Content-Type: application/json;charset=ISO-8859-1
Connection: close
Server: Artifactory/7.4.3 70403900
X-Artifactory-Id: 2148103ba10eacbb:-16f1c4c1:172093a231a:-8000
X-Artifactory-Node-Id: artifactory-server
WWW-Authenticate: Basic realm="Artifactory Realm"
(3) zypper
发送另一个 HTTP HEAD
请求,这次使用base64
编码的username:password
:
HEAD /myapp-release-rpm/stable/myapp/2019/3/repodata/repomd.xml HTTP/1.1
Host: rpm.example.com
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
User-Agent: ZYpp 17.19.0 (curl 7.60.0) openSUSE-Leap-15.1-x86_64
Accept: */*
Connection: close
(4) jfrog
最终以 HTTP 200
响应。
HTTP/1.1 200 OK
Date: Thu, 28 May 2020 08:20:04 GMT
Content-Type: application/xml
Content-Length: 1394
Connection: close
Server: Artifactory/7.4.3 70403900
X-Artifactory-Id: 2148103ba10eacbb:-16f1c4c1:172093a231a:-8000
X-Artifactory-Node-Id: artifactory-server
Last-Modified: Fri, 08 May 2020 10:25:19 GMT
Accept-Ranges: bytes
X-Artifactory-Filename: repomd.xml
Cache-Control: no-store
这些由 Artifactory 记录:
artifactory-request.log
:
2020-05-28T08:20:34.566Z [5f78297c2aeabaa8] [DENIED LOGIN] for client : username / 213.1.1.1.
2020-05-28T08:20:34.870Z [570978212a5318e3] [ACCEPTED DOWNLOAD] myapp-release-rpm-cache:stable/myapp/2019/3/repodata/repomd.xml for client : username / 213.1.1.1.
artifactory-access.log
:
2020-05-28T08:20:34.566Z|5f78297c2aeabaa8|213.2.2.2|non_authenticated_user|HEAD|/myapp-release-rpm/stable/myapp/2019/3/repodata/repomd.xml|401|-1|0|8|ZYpp 17.19.0 (curl 7.60.0) openSUSE-Leap-15.1-x86_64
2020-05-28T08:20:34.721Z|8018b7cbc9c424e8|213.2.2.2|username|HEAD|/myapp-release-rpm/stable/myapp/2019/3/repodata/repomd.xml|200|-1|1394|3|ZYpp 17.19.0 (curl 7.60.0) openSUSE-Leap-15.1-x86_64
2020-05-28T08:20:34.870Z|570978212a5318e3|213.2.2.2|username|GET|/myapp-release-rpm/stable/myapp/2019/3/repodata/repomd.xml|200|-1|1394|2|ZYpp 17.19.0 (curl 7.60.0) openSUSE-Leap-15.1-x86_64
...
所以基本上,zypper
带有 HEAD
请求,JFrog 说“你没有通过身份验证”,zypper
回复并尝试进行身份验证,最后 JFrog 对 zypper 进行身份验证。到目前为止是有道理的。
场景 2 - 403 禁止
做一些工作,几分钟后运行同样的zypper refresh --repo myrepo
命令,结果如下:
(1) zypper
发送带有base64
编码的username:
的HTTP HEAD
请求:
HEAD /myapp-release-rpm/stable/myapp/2019/3/repodata/repomd.xml HTTP/1.1
Host: rpm.example.com
Authorization: Basic dXNlcm5hbWU6
User-Agent: ZYpp 17.19.0 (curl 7.60.0) openSUSE-Leap-15.1-x86_64
Accept: */*
Connection: close
(2) jfrog
响应 HTTP 401 Unauthorized
并带有 WWW-Authenticate
标头:
HTTP/1.1 401 Unauthorized
Date: Thu, 28 May 2020 08:30:44 GMT
Content-Type: application/json;charset=ISO-8859-1
Connection: close
Server: Artifactory/7.4.3 70403900
X-Artifactory-Id: 2148103ba10eacbb:-16f1c4c1:172093a231a:-8000
X-Artifactory-Node-Id: artifactory-server
WWW-Authenticate: Basic realm="Artifactory Realm"
(3)zypper
发送另一个 HTTP HEAD
请求,这次使用base64
编码的username:password
:
HEAD /myapp-release-rpm/stable/myapp/2019/3/repodata/repomd.xml HTTP/1.1
Host: rpm.example.com
Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=
User-Agent: ZYpp 17.19.0 (curl 7.60.0) openSUSE-Leap-15.1-x86_64
Accept: */*
Connection: close
(4) 这一次,jfrog
回复 403 Forbidden
而不是 200 OK
。
HTTP/1.1 403 Forbidden
Date: Thu, 28 May 2020 08:30:44 GMT
Content-Type: application/json;charset=ISO-8859-1
Connection: close
Server: Artifactory/7.4.3 70403900
X-Artifactory-Id: 2148103ba10eacbb:-16f1c4c1:172093a231a:-8000
X-Artifactory-Node-Id: artifactory-server
WWW-Authenticate: Basic realm="Artifactory Realm"
artifactory-request.log
:
2020-05-28T08:30:44.496Z [46c81a2450623166] [DENIED LOGIN] for client : username / 213.1.1.1.
2020-05-28T08:30:44.630Z [769ed41c652daa7a] [DENIED LOGIN] for client : username / 213.1.1.1.
artifactory-access.log
:
2020-05-28T08:30:44.496Z|46c81a2450623166|213.2.2.2|non_authenticated_user|HEAD|/myapp-release-rpm/stable/myapp/2019/3/repodata/repomd.xml|401|-1|0|9|ZYpp 17.19.0 (curl 7.60.0) openSUSE-Leap-15.1-x86_64
2020-05-28T08:30:44.630Z|769ed41c652daa7a|213.2.2.2|non_authenticated_user|HEAD|/myapp-release-rpm/stable/myapp/2019/3/repodata/repomd.xml|403|-1|0|1|ZYpp 17.19.0 (curl 7.60.0) openSUSE-Leap-15.1-x86_64
请注意,当要求进行身份验证时,zypper 发送相同的 Authorization
标头值,但在第二种情况下,JFrog
无法对请求进行身份验证。
以前有人对 JFrog 有过同样的问题吗?我们猜测这是 JFrog 7 的问题,因为我们的刚刚升级,但我们无法验证这一点。不幸的是,我们采用的是付费计划,甚至没有支持许可证。
非常感谢任何建议和cmets。
其他信息
可能值得注意的是,yum
客户端(centos 和 rhel)与 JFrog Artifactory
没有这个确切的问题,这很可能是因为 yum 总是在 HTTP 标头中发送用户名和密码哈希,避免了401 Unauthorized
重新认证序列。
更多详情
我去年 5 月向 JFrog 提交了bug report,到目前为止还没有收到任何更新。
【问题讨论】:
【参考方案1】:您是否尝试将 baseurl 设置为:
http://username:apikey@some.url/artifactory
?
【讨论】:
您好,虽然这适用于curl
,但不适用于zypper
客户端。
这是 HA 设置还是单节点?是否对组或权限进行了任何更改?
这是一个单节点Artifactory。最近进行了升级,但在 zypper
客户端上已观察到此问题很长时间(尽管没有像现在那样详细调查)。以上是关于JFrog Artifactory 间歇性拒绝身份验证,403 被禁止的主要内容,如果未能解决你的问题,请参考以下文章
如何在云上创建自己的 Artifactory,例如 AWS 的 Codeartifact、Jfrog 的 Artifactory
CentOS 8安装JFrog Artifactory社区版解决方案