Um die Menge der Variablen zu bestimmen, die in der rohen WSGI-Umgebung übergeben werden, bevor Django irgendetwas mit ihnen macht, fügen Sie den folgenden Code in die WSGI-Skriptdatei anstelle Ihres Django-Krams ein.
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()]
Die Anzahl der Schlüssel/Wert-Paare wird dem Browser angezeigt.
Es ist wichtig herauszufinden, wie der SSO-Mechanismus funktioniert. Wenn es das Sinnvolle tut, werden Sie möglicherweise feststellen, dass es REMOTE_USER und möglicherweise AUTH_TYPE Variablen setzt. Wenn REMOTE_USER festgelegt ist, ist dies ein Indikator dafür, dass der in der Variablen benannte Benutzer von einem höheren Authentifizierungsmechanismus in Apache authentifiziert wurde. Diese Variablen würden normalerweise für die HTTP-Basis- und Digest-Authentifizierung festgelegt, aber um mit so vielen Systemen wie möglich zu arbeiten, sollte ein SSO-Mechanismus diese auch verwenden.
Wenn sie gesetzt sind, dann gibt es eine Django-Funktion, beschrieben unter:
http://docs.djangoproject.com/en/dev/howto/auth-remote-user/
, die dann verwendet werden können, haben Django-Authentifizierung auf einer höheren Ebene getan akzeptieren.
Auch wenn der SSO-Mechanismus nicht REMOTE_USER verwendet, sondern benutzerdefinierte Header verwendet, können Sie einen benutzerdefinierten WSGI-Wrapper für die gesamte Django-Anwendung verwenden, um benutzerdefinierte Header in einen geeigneten REMOTE_USER-Wert zu übersetzen, den Django dann verwenden kann .
Danke, das war sehr informativ. –