Pour déterminer l'ensemble des variables passées dans l'environnement WSGI brut, avant que Django n'y fasse quoi que ce soit, placez le code suivant dans le fichier de script WSGI à la place de votre contenu 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()]
Il affichera au navigateur l'ensemble des paires clé/valeur.
Il est important de connaître le fonctionnement du mécanisme SSO. Si c'est le cas, vous trouverez peut-être qu'il définit les variables REMOTE_USER et éventuellement AUTH_TYPE. Si REMOTE_USER est défini, il indique que l'utilisateur nommé dans la variable a été authentifié par un mécanisme d'authentification de niveau supérieur dans Apache. Ces variables sont normalement définies pour l'authentification HTTP Basic et Digest, mais pour utiliser autant de systèmes que possible, un mécanisme SSO doit également les utiliser.
S'ils sont, alors il y a une fonction Django, décrit à:
http://docs.djangoproject.com/en/dev/howto/auth-remote-user/
qui peut ensuite être utilisé pour avoir Django accepter l'authentification fait à un niveau supérieur. Même si le mécanisme SSO n'utilise pas REMOTE_USER mais utilise des en-têtes personnalisés, vous pouvez utiliser un wrapper WSGI personnalisé autour de toute l'application Django pour traduire les en-têtes personnalisés en une valeur REMOTE_USER appropriée, que Django peut ensuite utiliser .
Merci, c'était très instructif. –