Django SAML 集成

Django SAML integration

我在 Docker 本地使用 Django 1.9,Python 3,运行(用于测试)
尝试将 django-saml2-auth 集成到我的应用程序中。
几乎遵循文档中的所有步骤:
1) 所有安装都成功
2) 新 URL 的导入高于其余
3) 安装的应用程序包括 'django_saml2_auth'
4) 'SAML2_AUTH' dict 被放置在设置中(所有属性都被映射)
5) 在 SAML2 身份提供者(使用 OneLogin)中,单点登录 URL 和受众 URI(SP 实体 ID)设置为 http://127.0.0.1:8000/saml2_auth/acs/

当我到达 http://127.0.0.1:8000/admin 时,浏览器进入无限重定向循环:

...
[02/May/2018 15:43:06] "GET /admin/ HTTP/1.1" 302 0
[02/May/2018 15:43:06] "GET /admin/login/?next=/admin/ HTTP/1.1" 302 0
[02/May/2018 15:43:07] "POST /saml2_auth/acs/ HTTP/1.1" 302 0
[02/May/2018 15:43:07] "GET /admin/ HTTP/1.1" 302 0
[02/May/2018 15:43:07] "GET /admin/login/?next=/admin/ HTTP/1.1" 302 0
[02/May/2018 15:43:08] "POST /saml2_auth/acs/ HTTP/1.1" 302 0
[02/May/2018 15:43:08] "GET /admin/ HTTP/1.1" 302 0
...

我希望会话将为 created/fetched 的用户启动,并且我将进入 /admin/<whatever> 页面。

如果能帮我调试这个,我将不胜感激,谢谢!

编辑:我能够通过从 settings.py 中删除 AUTHENTICATION_BACKENDS 来让它工作 - 我还有 3 个我使用的其他后端。似乎它们与 django-saml2-auth 冲突。
有没有办法让 django-saml2-auth 与其他后端一起工作?

编辑 2:将尝试集成 django-saml2-pro-auth,它有一个后端,因此不会发生冲突。不过,我真的很感激一些见解。

编辑 3:回到编辑 2,当我删除所有后端并且它们不冲突时,日志流如下所示:

[04/May/2018 15:24:26] "GET /admin/ HTTP/1.1" 302 0
[04/May/2018 15:24:27] "GET /admin/login/?next=/admin/ HTTP/1.1" 302
[04/May/2018 15:26:27] "POST /saml2_auth/acs/ HTTP/1.1" 302 0
[04/May/2018 15:26:27] "GET /admin/ HTTP/1.1" 200 38398

最后一个 GET 没有被重定向,200.

问题已解决: 在进行更深入的研究之后- 问题似乎是这段代码:
django_saml2_auth/views.py, acs():

if target_user.is_active:
  target_user.backend = 'django.contrib.auth.backends.ModelBackend'
  login(r, target_user)
else:
  return HttpResponseRedirect(get_reverse([denied, 'denied', 'django_saml2_auth:denied']))

似乎需要默认的 ModelBackend。 当使用其他后端时,Django 不再使用默认值,因此无限循环。 如果将默认后端添加到后端列表,一切都会按预期工作。