¿Es posible agregar autenticación de acceso HTTP básica a través de HAProxy?

25

He configurado con éxito HAProxy frente a un servidor HTTP sobre el que no tengo control .

¿Es posible configurar HAProxy para agregar autenticación HTTP simple a todos los sitios, teniendo en cuenta que no puedo configurar esto en el back-end?

Gracias,

Lars

Lars Schneider
fuente

Respuestas:

36

Tuve que hacer esto hoy mismo (¡porque IIS 7.5 extrañamente en realidad no admite autenticación contra nada más que cuentas de usuario de Windows o AD!) ...

Aquí está todo el código.

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

Lo documenté un poco mejor aquí: http://nbevans.wordpress.com/2011/03/03/cultural-learnings-of-ha-proxy-for-make-benefit/

nbevans
fuente
2
+1 Solo quería agregar que también puede agregar las líneas finales en una frontenddefinición en lugar de backendsi lo desea. Y la realm xxxxparte es opcional.
UpTheCreek
Implementé esto, pero lo que sucede es que en cada llamada posterior a la API recibo una ventana emergente que me solicita autenticación, lo que lo hace inutilizable. ¿Hay alguna forma de preguntarlo una vez y luego guardar el resto de las llamadas? Eso sería muy util.
shshnk
2

Creo que esto es realmente posible, pero en este momento solo puedo encontrar un ejemplo para llegar a la mitad ...

http://haproxy.1wt.eu/download/1.4/doc/configuration.txt es su biblia.

Consulte la sección 3.4 (Listas de usuarios)

Comienza:

Es posible controlar el acceso a las secciones frontend / backend / listen o a las estadísticas http al permitir solo usuarios autenticados y autorizados. Para hacer esto, es necesario crear al menos una lista de usuarios y definir usuarios.

Esa sección explica cómo configurar una lista de usuarios. El ejemplo en esa sección es bastante exhaustivo, así que cópielo si es necesario.

Luego, necesito descubrir cómo aplicarlo ... Creo que la respuesta se encuentra en la sección 7.5.3 (Coincidencia en la capa 7)

Creo que podría ser tan simple como usar lo siguiente en una 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.

Nuevamente, no lo he probado, pero eso es lo que leí en la documentación, ya que es posible sugerir.

Espero que sea suficiente para que comiences.

Caro
fuente
Buen grito, ¡supongo que ya estoy acostumbrado!
Caro
Aunque volviéndolo a ver, no parece que se haya actualizado en meses ... No he verificado cambios específicos entre eso y el muro de texto, pero supongo que hay algunos.
Caro
1
Ese 'mejor' enlace bíblico es 404'ing. Aún mejor sería este haproxy.org/#docs . Allí encontrará artículos de manualidades HTML / texto.
Glenn Plas
Enlaces para acceder a los manuales: cbonte.github.io/haproxy-dconv .
slm