Un collègue m'a recommandé de transférer ce message de StackOverflow à ServerFault :
Ça m'a rendu fou. J'ai une application web qui est servie par le serveur web Apache. Le serveur de base de données qui soutient l'application est Apache CouchDB, qui expose une API HTTP pour récupérer les documents et les pièces jointes.
J'ai sécurisé la base de données CouchDB en fournissant un objet de sécurité qui ne permet qu'à certains utilisateurs d'accéder aux données de la base et qui renvoie 401 pour les requêtes anonymes aux points de terminaison HTTP.
Je veux pouvoir faire correspondre des URL publiques à des pièces jointes de documents stockées dans cette base de données. J'ai donc essayé de créer une règle de réécriture dans mon fichier .htaccess qui renvoie les requêtes de certaines URL directement vers CouchDB, tout en codant en dur les informations d'identification de l'utilisateur, comme suit :
## DOWNLOAD STREAM:
RewriteCond %{HTTP_HOST} ^example.com$
RewriteRule download/(.*) http://user:pass@127.0.0.1:5984/database/$1 [P]
Dans un monde idéal, l'exemple ci-dessus prendrait l'URL suivante :
http://example.com/download/UUID/attachment.ext
Et le proxy à :
http://user:pass@127.0.0.1:5984/database/UUID/attachment.ext
Cette méthode transmet effectivement la demande à CouchDB, mais omet le composant userinfo du schéma URI. La demande est donc traitée comme anonyme et je reçois une erreur 401. La pièce jointe n'est diffusée que si je supprime la sécurité de la base de données.
J'ai passé quelques heures à me documenter sur la configuration d'Apache et à faire des expériences, mais en vain. Les recherches sur le web sont infructueuses en raison de toutes les requêtes connexes avec des mots-clés similaires.
Comment puis-je m'assurer que mod_rewrite inclut le nom d'utilisateur et le mot de passe fournis dans la règle de réécriture lorsqu'il se connecte à CouchDB ?