HTTP Basic auth utilisant mod_wsgi

J’essaie de faire l’authentification de base HTTP avec bottle.py en utilisant le décorateur suivant que j’ai écrit:

def check_auth(username, password): if username == 'admin' and password == 'pass': return True else: return False def authenticate(msg_ssortingng = "Authenticate."): response.content_type = "application/json" message = {'message': msg_ssortingng} resp = jsonpickle.encode(message) response.status = "401 - Unauthorized" response.headers['WWW-Authenticate'] = 'Basic realm="PyBit"' return resp def requires_auth(f): def decorated(*args, **kwargs): print request.auth auth = request.auth if not auth: return authenticate() elif not check_auth(auth[0],auth[1]): response.status = "401 - Unauthorized" return authenticate("HTTP Authentication Failed.") else: return f(*args, **kwargs) return decorated 

Cela fonctionne dans le serveur intégré wsgiref, mais pas quand je lance mon application sous Apache en utilisant mod_wsgi. L’object “auth” est toujours “None” dans ce cas.

Apache le pince-t-il?

Nevermimd. sortingé Les en-têtes d’autorisation ne sont pas transmis par défaut. Nous devons définir la directive WSGIPassAuthorization pour contrôler si les en-têtes d’autorisation HTTP sont transmis à une application WSGI dans la variable HTTP_AUTHORIZATION de l’environnement d’application WSGI lorsque les en-têtes de requête HTTP équivalents sont présents.