У меня проблемы с подключением к сервису, использующему дайджест-аутентификацию (не промежуточное программное обеспечение для аутентификации дайджеста Traefik).
Я использую базу данных, которая предоставляет REST API на конкретном порту. Мне удалось получить Traefik и базу данных, работающую в docker swarm. Однако я сталкиваюсь с трудностями, используя и правило PathPrefix, и дайджест-аутентификацию.
Вот ситуация:
- Если я установил правило маршрутизатора на
PathPrefix(`/`)
и не использовал промежуточное ПО StripPrefix
, я могу использовать либо digest auth, либо basi c auth; конечно, я не хочу использовать этот путь. - Если я установлю правило равным
PathPrefix(`/some/path`)
и не уберу префикс, я могу использовать дайджест-аутентификацию, но ответом будет 404 ( путь указывает на некоторую конечную точку, которая не существует). - Если я установлю для правила
PathPrefix(`/some/path`)
и уберу префикс, будет работать только базовый c auth.
Вот некоторый вывод curl
(некоторая информация отредактирована):
curl -v -u admin:password --digest localhost/some/path/additional/path/required/by/api
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 80 (#0)
* Server auth using Digest with user 'admin'
> GET /some/path/additional/path/required/by/api HTTP/1.1
> Host: localhost
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 401 Unauthorized
< Content-Length: 104
< Content-Type: application/json; charset=utf-8
< Server: Database
< Www-Authenticate: Digest realm="public", qop="auth", nonce="384...g==", opaque="bef...c7b"
< Date: Wed, 18 Mar 2020 00:24:31 GMT
<
* Ignoring the response-body
* Connection #0 to host localhost left intact
* Issue another request to this URL: 'http://localhost/some/path/additional/path/required/by/api'
* Found bundle for host localhost: 0x7f8e68d1c0b0 [can pipeline]
* Re-using existing connection! (#0) with host localhost
* Connected to localhost (::1) port 80 (#0)
* Server auth using Digest with user 'admin'
> GET /some/path/additional/path/required/by/api HTTP/1.1
> Host: localhost
> Authorization: Digest username="admin", realm="public", nonce="384...g==", uri="/some/path/additional/path/required/by/api", cnonce="MGZ...zc=", nc=00000001, qop=auth, response="3c4...8a7", opaque="bef...c7b"
> User-Agent: curl/7.54.0
> Accept: */*
>
< HTTP/1.1 401 Unauthorized
< Content-Length: 104
< Content-Type: application/json; charset=utf-8
< Server: Database
* Authentication problem. Ignoring this.
< Www-Authenticate: Digest realm="public", qop="auth", nonce="384...g==", opaque="c43...da7"
< Date: Wed, 18 Mar 2020 00:24:31 GMT
<
{"errorResponse": {"statusCode":401,
"status":"Unauthorized",
"message":"401 Unauthorized"
}
* Connection #0 to host localhost left intact
}%
Я подозреваю, что значение uri
в заголовке Authorization
, переданном REST API, как-то связано с этим? Поскольку в нем есть префикс /some/path
, хотя промежуточное ПО должно было его удалить? Не совсем уверен.
Вот метки в разделе deploy
службы:
- traefik.enable=true
- traefik.docker.network=stackname_proxy
- traefik.http.routers.database.entrypoints=web
- traefik.http.routers.database.rule=PathPrefix(`/some/path`)
- traefik.http.routers.database.middlewares=database
- traefik.http.middlewares.database.stripprefix.prefixes=/some/path
- traefik.http.services.database.loadbalancer.server.port=1234
Я бы очень хотел использовать дайджест-аутентификацию, если это вообще возможно. Есть приложение, которое подключается к базе данных и использует дайджест-аутентификацию, и ее было бы очень трудно изменить.
У кого-нибудь есть какие-либо знания / знания для меня? Спасибо!