Чтобы определить набор переменных, передаваемых в необработанной среде WSGI, перед тем, как Django что-либо с ними сделает, поместите следующий код в файл сценария WSGI вместо содержимого Django.
import StringIO
def application(environ, start_response):
headers = []
headers.append(('Content-type', 'text/plain'))
start_response('200 OK', headers)
input = environ['wsgi.input']
output = StringIO.StringIO()
keys = environ.keys()
keys.sort()
for key in keys:
print >> output, '%s: %s' % (key, repr(environ[key]))
print >> output
length = int(environ.get('CONTENT_LENGTH', '0'))
output.write(input.read(length))
return [output.getvalue()]
Он отобразит обратно в браузер набор пар ключ / значение.
Важно выяснить, как работает механизм единого входа. Если он делает разумную вещь, вы, возможно, обнаружите, что он устанавливает переменные REMOTE_USER и, возможно, AUTH_TYPE. Если установлен REMOTE_USER, это показатель того, что имя пользователя в переменной было аутентифицировано каким-либо механизмом аутентификации более высокого уровня в Apache. Эти переменные обычно устанавливаются для HTTP Basic и дайджест-аутентификации, но для работы с максимально возможным числом систем механизм SSO также должен их использовать.
Если они установлены, то есть функция Django, описанная в:
http://docs.djangoproject.com/en/dev/howto/auth-remote-user/
, который затем можно использовать для принятия аутентификации Django на более высоком уровне.
Даже если механизм единого входа не использует REMOTE_USER, а вместо этого использует пользовательские заголовки, вы можете использовать пользовательскую оболочку WSGI для всего приложения Django, чтобы преобразовать любые пользовательские заголовки в подходящее значение REMOTE_USER, которое Django может затем использовать.