Nous essayons d'utiliser le module ngx_postgres pour effectuer une authentification de base via NGINX. Nous voulons récupérer une valeur à partir de la paire de résultats de la requête et l'ajouter à l'en-tête HTTP, puis l'envoyer par proxy à un autre serveur.
Nous avons réussi à nous authentifier via postgres, mais le problème est de transmettre la paire de résultats au proxy. Le code que nous utilisons actuellement est le suivant :
location = /test_auth {
internal;
postgres_escape $user $remote_user;
postgres_escape $pass $remote_passwd;
postgres_pass geo_database;
postgres_query "select user_name,contract_id,access_token from schema_name.table_name where user_name=$user and password=md5($pass);";
postgres_rewrite no_rows 401;
more_set_headers -s 401 'WWW-Authenticate: Basic realm="Restricted"';
postgres_output none;
postgres_set $query_val 0 0 required;
}
location /test/ {
auth_request /test_auth;
proxy_pass http://back_end_server/public-dev/;
proxy_set_header test $query_val;
proxy_redirect http://back_end_server/public-dev/ http://example_domain.com/;
}
Il s'agit d'un sous-ensemble de nombreuses choses différentes que nous avons essayées. Le problème dans cet exemple est que query_val semble être détruit dans la sous-requête. Nous parvenons à récupérer la paire de résultats de la requête lorsque l'appel postgres n'est pas dans une sous-requête, mais cela désactive notre authentification.
Nous avons également essayé d'effectuer une simple requête dans l'emplacement principal, puis de transférer ces données vers l'autre emplacement, mais sans succès. La paire de résultats de la requête est ajoutée au fichier d'en-tête correctement si nous la dirigeons vers une ressource locale comme un fichier index.html, mais dès que nous essayons de l'ajouter à l'en-tête http et de l'envoyer au proxy, elle n'existe plus.
Tout conseil à ce sujet serait grandement apprécié.
[Mise à jour] J'ai passé toute la journée à lire les modules que j'utilise, et je pense vraiment que c'est un problème avec l'ordre de phase des modules. J'ai l'impression que la réécriture du proxy se produit avant que la sous-requête d'authentification postgres ne renvoie un résultat. Je vais poursuivre mes recherches. Toute aide est toujours appréciée.