Traefik v2 не может подключиться к сервису, используя дайджест приложения - PullRequest
0 голосов
/ 18 марта 2020

У меня проблемы с подключением к сервису, использующему дайджест-аутентификацию (не промежуточное программное обеспечение для аутентификации дайджеста 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

Я бы очень хотел использовать дайджест-аутентификацию, если это вообще возможно. Есть приложение, которое подключается к базе данных и использует дайджест-аутентификацию, и ее было бы очень трудно изменить.

У кого-нибудь есть какие-либо знания / знания для меня? Спасибо!

...