Можно добавить базовую аутентификацию доступа HTTP через HAProxy?

25

Я успешно настроил HAProxy перед сервером HTTP, который я не могу контролировать .

Можно ли настроить HAProxy для добавления простой HTTP-аутентификации на все сайты, учитывая, что я не могу настроить это на бэкэнде?

Благодарность,

Lars

Ларс Шнайдер
источник

Ответы:

36

Я должен был сделать это сегодня сам (потому что IIS 7.5 причудливо не поддерживает аутентификацию против чего-либо, кроме учетных записей пользователей Windows или AD!) ...

Вот весь код

userlist UsersFor_AcmeCorp
  user joebloggs insecure-password letmein

backend HttpServers
  .. normal backend stuff goes here as usual ..
  acl AuthOkay_AcmeCorp http_auth(UsersFor_AcmeCorp)
  http-request auth realm AcmeCorp if !AuthOkay_AcmeCorp

Я задокументировал это немного лучше здесь: http://nbevans.wordpress.com/2011/03/03/cultural-learnings-of-ha-proxy-for-make-benefit/

nbevans
источник
2
+1 Просто хотел добавить, что вы также можете добавить последние строки в frontendопределении, а не backendесли хотите. И realm xxxxчасть необязательна.
UpTheCreek
Я реализовал это, но происходит то, что при каждом последующем вызове API появляется всплывающее окно с запросом аутентификации. Это делает его непригодным для использования. Есть ли в любом случае, когда он спрашивается один раз, а затем кэшируется для остальных вызовов? Это было бы очень полезно.
Шшнк
2

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

http://haproxy.1wt.eu/download/1.4/doc/configuration.txt - ваша библия.

Ознакомьтесь с разделом 3.4 (Списки пользователей)

Это начинается:

Можно управлять доступом к разделам frontend / backend / listen или http-статистике, разрешая только аутентифицированным и авторизованным пользователям. Для этого необходимо создать хотя бы один список пользователей и определить пользователей.

В этом разделе объясняется, как настроить список пользователей. Пример в этом разделе довольно исчерпывающий, поэтому скопируйте его, если нужно.

Далее нужно выяснить, как его применить ... Я думаю, что ответ лежит в разделе 7.5.3 (Соответствие на уровне 7)

Я думаю, что это может быть так же просто, как использовать следующее в acl:

http_auth(userlist)
http_auth_group(userlist) <group> [<group>]*
  Returns true when authentication data received from the client matches
  username & password stored on the userlist. It is also possible to
  use http_auth_group to check if the user is assigned to at least one
  of specified groups.

Опять же, я не проверял это, но это то, что я прочитал документацию, поскольку предположения возможны.

Надеюсь, этого достаточно, чтобы вы начали?

дорогой
источник
Хороший крик, я думаю, я просто привык к этому сейчас!
Дорогой
Хотя, глядя на это снова, кажется, что оно не обновлялось месяцами ... Я не проверял конкретные изменения между этим и стеной текста, но предполагаю, что они есть.
Дорогой
1
Эта «лучшая» библейская ссылка - 404. Еще лучше было бы это haproxy.org/#docs . Там вы найдете HTML / текстовые вкусности руководства.
Гленн Плас
Ссылки для получения в руководствах: cbonte.github.io/haproxy-dconv .
Slm
1

Если вы хотите сделать это в целях аутентификации

option httpchk

config, это более простое решение работает: /programming/13325882/haproxy-solr-healthcheck-with-authentication

Дэн Ричельсон
источник
1
Добро пожаловать в сбой сервера! Хотя это может теоретически ответить на вопрос, было бы предпочтительным включить сюда основные части ответа и предоставить ссылку для справки.
HopelessN00b