У меня IdP инициировал настройку SSO, где кто-либо просматривал https://www.xxxxxx.com
, перенаправляется для аутентификации на https://www.yyyyyy.com
и после успешного хоста аутентификации yyyyyy.com
POST ответ SAML на обратный вызов URL https://www.xxxxxx.com/SAML
.Мне действительно нужно csrf_exempt в представлении приложения django?
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',
]
Все работает, когда я использую csrf_exempt на индексном но если удалить csrf_exempt я получить Cookie Not Set
ошибка. У меня есть 2 вопроса,
- Действительно ли мне нужен csrf_exempt на моем индексном представлении? Или есть другой рекомендуемый способ?
- Является ли заказ для WhiteNoiseMiddleware и BrokenLinkEmailsMiddleware правильным?
Я использую Django == 1.9.5 и Python 3.5.1
Заказ промежуточного ПО представляет собой отдельный вопрос, нужен ли 'csrf_exempt'. [Whitenoisedocs] (http://whitenoise.evans.io/en/stable/#quickstart-for-django-apps) говорят, что промежуточное программное обеспечение должно быть, прежде всего, промежуточным программным обеспечением, кроме промежуточного программного обеспечения безопасности, но у вас оно под «UpdateCacheMiddleware». В [отчетах об ошибках] (https://docs.djangoproject.com/en/1.9/howto/error-reporting/#errors) говорится, что неработающий декодер электронной почты должен отображаться над другим промежуточным программным обеспечением, которое перехватывает 404 ошибки. Кажется, у вас нет ни одного из них, так что это выглядит хорошо для меня. – Alasdair