Django mod_wsgi + Apache basic auth

Дата публикации:3 июля 2013 г. 12:18:17

Здравствуйте! Недавно задумался над тем, как можно улучшить безопастность админки Django и плюс сделать что-то двухфакторной авторизации :) Сразу подумал про Apache Basic Auth, однако встала одна проблема - у меня на хостинге не было доступа к файлу httpd.conf, поэтому начал копать в сторону WSGI и нашел! Нашел отличный сниппет здесь. Однако, было необходимо запаролить только админку, поэтому немного поправил код:

#! /usr/bin/python
# -*- coding: utf-8 -*-

from django.conf import settings
from django.http import HttpResponse

class HttpAuthMiddleware:
    
    def unauthed(self):
        response = HttpResponse(u"""<html><title>Авторизация пользователя</title><body>
                                <h1>Обязательная авторизация</h1></body></html>""", mimetype="text/html")
        response['WWW-Authenticate'] = 'Basic realm="Development"'
        response.status_code = 401
        return response
    
    def process_request(self,request):
        if request.path == '/admin/':
            if not request.META.has_key('HTTP_AUTHORIZATION'):
            
                return self.unauthed()
            else:
                authentication = request.META['HTTP_AUTHORIZATION']
                (authmeth, auth) = authentication.split(' ',1)
                if 'basic' != authmeth.lower():
                    return self.unauthed()
                auth = auth.strip().decode('base64')
                username, password = auth.split(':',1)
                if username == settings.BASICAUTH_USERNAME and password == settings.BASICAUTH_PASSWORD:
                    return None
            
                return self.unauthed()
        return None

Не забудьте добавить BASICAUTH_USERNAME и BASICAUTH_PASSWORD в ваш settings.py. Ну и не забудьте добавить наше middleware в MIDDLEWARE_CLASSES.

И еще, добавьте в ваш .htaccess одну строчку:

WSGIPassAuthorization On

На этом все, спасибо за внимание!

Метки:apache, basic_auth, django, mod_wsgi, авторизация, htaccess