2016-12-31 3 views
2

J'ai un serveur http nginx qui authentifie les utilisateurs et transmet la requête authentifiée à une application Flask via wsgi. Lorsque j'imprime tout l'en-tête de l'application Flask, aucune information utilisateur n'est disponible.Comment configurer nginx pour transmettre des informations utilisateur à wsgi/flask

Est-il possible d'amener nginx à inclure le nom d'utilisateur dans l'en-tête de la demande?

Voici le bloc de serveur avec la configuration d'authentification ...

server { 
    listen 80; 
    server_name notes.example.org; 
    return 301 https://$server_name$request_uri; 
} 

server { 


    # SSL configuration 

    listen 443; 
    listen [::]:443; 
    include snippets/ssl-example.org.conf; 
    include snippets/ssl-params.conf; 
    server_name notes.example.org; 

    location/{ 
     auth_basic "Restricted Content"; 
     auth_basic_user_file /path/to/passwd/file; 
     include uwsgi_params; 
     uwsgi_pass unix:/path/to/wsgi/socket; 
    } 


} 

tête de demande comme on le voit par l'application en cours d'exécution sous wsgi ...

Authorization: Basic **************== 
Content-Length: 0 
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36 
Dnt: 1 
Host: notes.example.org 
Upgrade-Insecure-Requests: 1 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Accept-Language: en-US,en;q=0.8 
Content-Type: 
Accept-Encoding: gzip, deflate, sdch, br 
+0

fixer le nginx vous utilisez conf, pour que les autres peuvent répondre correctement à –

+0

j'ai ajouté la configuration auth au poste d'origine. –

Répondre

1

Ici, vous utilisez http l'authentification de base option, après un retour réussi donné par le serveur nginx, le navigateur envoie un base64 de username:password. il suffit d'utiliser le module base64 python pour obtenir le nom d'utilisateur & mot de passe,

>>> from base64 import b64decode 
>>> authorization_header = "dXNlcm5hbWU6cGFzc3dvcmQ=" # value from flask request header 
>>> details = b64decode("dXNlcm5hbWU6cGFzc3dvcmQ=") 
>>> username, password = details.split(':') 
>>> username 
'username' 
>>> password 
'password' 
>>>