JFrog Artifactory периодически отклоняет аутентификацию с 403 запрещено - PullRequest
3 голосов
/ 28 мая 2020

Мне трудно настроить zypper клиентов (SLES и OpenSUSE) для работы с нашим RPM Repository в JFrog из-за некоторых проблем с «аутентификацией». Сначала я подумал, что это просто проблема с zypper и opensuse, поэтому сначала сосредоточился на наших усилиях, чтобы заставить все работать с zypper. Это было предыдущим вопросом.

Но эти связанные с аутентификацией ошибки время от времени возникают и у yum клиентов (CentOS), хотя и не так часто.

Итак, я попытался сделать man-in-the-middle, чтобы увидеть, что происходит под капотом, и это последовательность с zypper:


Сценарий 1 - успешная проверка подлинности

Следующее: последовательность zypper refresh --repo myrepo:

(1) zypper отправляет запрос HTTP HEAD с кодировкой base64 username::

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 отвечает и пытается авторизоваться enticate, и, наконец, JFrog аутентифицирует zypper. На данный момент это имеет смысл.


Сценарий 2 - 403 запрещен

Поработайте, затем запустите ту же команду zypper refresh --repo myrepo через несколько минут или около того, и вот результат:

(1) zypper отправляет запрос HTTP HEAD с кодированием base64 username::

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, поскольку наша только недавно была обновлена, но у нас нет возможности проверить это. И, к сожалению для нас, мы находимся на платном плане, у которого даже нет лицензии на поддержку.

Мы будем очень благодарны за любые предложения и комментарии.

Дополнительная информация

Возможно, стоит отметить, что клиенты yum (centos и rhel) не имеют этой точной проблемы с JFrog Artifactory, и это, скорее всего, потому, что yum всегда отправляет имя пользователя и пароль ha sh в заголовке HTTP, избегая последовательность повторной аутентификации 401 Unauthorized.

1 Ответ

0 голосов
/ 31 мая 2020

вы пытались установить baseurl на:

http://username:apikey@some.url/artifactory

?

...