Django3 auth SAML2集成

django3-auth-saml2的Python项目详细描述


Django3 Auth SAML2集成

作为Django3应用程序的开发人员,我需要集成一个基于SAML2的 单点登录(SSO)用户身份验证系统,例如 Okta。我知道有很多现有的软件包 但我想要一个超简单的,不需要太多 我的settings.py文件中的配置。我也需要这种整合才能发挥作用 使用现有的Django解决方案,不允许我修改设置.py 直接,如 Netbox。在

这个django3_auth_saml2包的灵感来自于现有的 django-saml2-auth。在

显著变化

  1. Django3/Python3代码库
  2. 提供两个视图:一个用于登录重定向到SSO,另一个用于SSO登录
  3. 使用Django RemoteUserBackend(或子类)处理用户创建和配置过程
  4. response.META['SAML2_AUTH_RESPONSE']中提供SAML2身份验证响应负载
  5. {cd4>处理应用程序中的任何特定错误
  6. 配置可以存储在django3_auth_saml2.config.SAML2_AUTH_CONFIG中作为替代 使用Djangosettings.py文件

系统要求

此包要求安装xmlsec库。在

观点

此软件包提供两个视图:

  • login-当用户试图直接登录到应用程序时,应该调用URL视图
  • acs-这个URL视图应该由SSO系统(Okta)调用

当用户试图使用login时,视图将重定向用户的web 浏览器到SSO系统进行身份验证。一旦用户在进行身份验证 然后,SSO系统将调用acsURL视图来登录 Django应用程序。在

在你的根上_URLCONF.url模式您需要定义两个url。第一个 用于SSO系统,第二个是您的登录URL,它将强制 用户首先通过SSO进行身份验证。你可以把这些换成适合你的 特定应用程序API。在

请记住,'django3_auth_saml2.urls'提供了'acs'视图,因此 下面的示例将生成app API“/sso/acs/”和“/sso/login/”。在

urlpatterns=[path('sso/',include('django3_auth_saml2.urls')),path('login/',RedirectView.as_view(url='/sso/login/')),]

Django系统配置

这些选项已经从最初的django-sam2-auth包中简化, 仅支持以下功能:

要求

AUTHENTICATION_后端
(NEW)后端的虚线字符串名称,例如:
"django.contrib.auth公司.后端.远程用户后端““

其中之一:

A)METADATA\u AUTO_CONF_URL
可以检索元数据文档的SSO系统的URL,例如:
https://mycorp.oktapreview.com/app/sadjfalkdsflkads/sso/saml/metadata

B)METADATA\u本地文件路径
作为使用URL的替代方法,您可以将元数据内容存储到本地文件中,例如:
“/etc/oktapreview网箱-元数据.xml““

可选

DEFAULT\u下一个URL
登录成功后用于重定向用户的下一个URL。默认为/。在

DEFAULT_SSO_ACS\u URL
用于SSO登录的URL。默认为/sso/acs/。在

ENTITY\u ID
这通常是应用程序的URL,例如:
https://okta-devtest.ngrok.io

ASSERTION\u URL-相同 这通常是应用程序的URL,例如:
https://okta-devtest.ngrok.io

NAME\u ID_格式
标识用户名的格式,有关选项,请参见docs。 此值默认为使用电子邮件。在

默认情况下,用户名值将取自SAML响应 name_id.text值。例如,如果NAME_ID_格式设置为使用电子邮件, 然后用户名值将是用户的电子邮件地址。在

有关这些术语的详细信息,请参阅docs。在

示例

您应该在Djangosettings.py文件中创建SAML2_AUTH_CONFIG字典, 例如:

^{pr2}$

用户创建和配置通过RemoteUserBackend进行配置

默认情况下,acs将从 saml2_auth_resp.name_id.text调用后端时的值authenticate() 方法。例如,如果SSO系统(Okta)配置了名称ID 格式为email(如上面的示例所示),则用户名将是 用户电子邮件地址。在

acs视图将把response.META['SAML2_AUTH_RESPONSE']设置为 saml2.response.AuthnResponse实例,以便您可以访问此实例 信息。在

acs调用后端authenticate()时,如果 defaul不存在;请参见类属性create_unknown_user。在这个 如果调用了RemoteUserBackend.configure_user()方法。在

您可以将RemoteUserBackend子类化,实现您自己的authenticate()configure_user()方法来使用response.META['SAML2_AUTH_RESPONSE'] 数据。您可以访问SAML2用户标识属性。请参见中的示例 backends.py。在

使用Netbox?在

如果您正在使用Netbox并且您使用 不想派生/修改系统settings.py文件,请参阅 netbox-plugin-auth-saml2

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
字符串Java字母替换无效   java Spring Roo JPA MS SQL Server无法打开JPA EntityManager组织。冬眠例外GenericJDBCException:无法打开连接   在scala中使用JavaWS对大型数据文件进行java流式处理   Java编译器是否将字节和短字符识别为文本?   java无法查找符号错误,空指针   mongodb在Java中重用数据库连接   java将多个StringArray从字符串文件获取到活动中   java是一个变量,它只保存最后一次鼠标单击的坐标   c#尺寸有限;添加、删除和洗牌   java如何在Android中显示来自资产文件夹的文本文件中的文本   Android应用程序中的java Tensorflow Lite自定义对象检测模型错误   java如何在foreachloop中使用scanner将来自命令行的输入存储到数组中   java如何定义一个好的存储库接口   Android中的java解析动态json对象