Ich habe IdP Initiated SSO-Setup, wo jeder Browsing https://www.xxxxxx.com
für die Authentifizierung an https://www.yyyyyy.com
weitergeleitet werden und nach erfolgreicher Authentifizierung Host yyyyyy.com
POST die SAML-Antwort auf Rückruf-URL https://www.xxxxxx.com/SAML
.Benötige ich wirklich csrf_exempt in der Django App-Ansicht?
urls.py
url(r'^SAML$', views.index, name='index'),
url(r'^home$', views.home, name='home'),
url(r'^$', RedirectView.as_view(url='https://www.yyyyyy.com', permanent=True)),
views.py
@csrf_exempt
def index(request):
if request.method == 'POST':
...
...
return redirect('/home')
else:
return redirect('/')
@login_required(login_url='/')
def home(request):
return render(request, 'myapp/index.html')
settings.py
CSRF_TRUSTED_ORIGINS = ['yyyyyy.com']
MIDDLEWARE_CLASSES = [
'django.middleware.security.SecurityMiddleware',
'django.middleware.cache.UpdateCacheMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.common.BrokenLinkEmailsMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django.middleware.cache.FetchFromCacheMiddleware',
]
Alles funktioniert, wenn ich csrf_exempt auf Indexansicht verwenden, aber wenn ich entfernen csrf_exempt ich dann erhalten Cookie Not Set
Fehler. Ich habe 2 Fragen,
- Benötige ich wirklich csrf_exempt auf meiner Indexansicht? Oder gibt es einen anderen empfohlenen Weg?
- Ist die Bestellung für WhiteNoiseMiddleware und BrokenLinkEmails Middleware korrekt?
Ich verwende Django == 1.9.5 und Python 3.5.1
Die Bestellung der Middleware scheint eine separate Frage zu sein, ob 'csrf_exempt' notwendig ist. Die [whitenoisedocs] (http://witenoise.evans.io/en/stable/#quickstart-for-django-apps) sagen, die Middleware sollte über allen Middleware außer Sicherheits Middleware sein, aber Sie haben es unterhalb der 'UpdateCacheMiddleware'. Die [Fehlerberichtsdokumente] (https://docs.djangoproject.com/en/1.9/howto/error-reporting/#errors) sagen, dass ein E-Mail-Dekorator mit einem defekten Link über einer anderen Middleware angezeigt werden sollte, die 404-Fehler abfängt. Du scheinst keine davon aktiviert zu haben, also sieht es für mich in Ordnung aus. – Alasdair