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。在
显著变化:
- Django3/Python3代码库
- 提供两个视图:一个用于登录重定向到SSO,另一个用于SSO登录
- 使用Django RemoteUserBackend(或子类)处理用户创建和配置过程
- 在
response.META['SAML2_AUTH_RESPONSE']
中提供SAML2身份验证响应负载 - {cd4>处理应用程序中的任何特定错误
- 配置可以存储在
django3_auth_saml2.config.SAML2_AUTH_CONFIG
中作为替代 使用Djangosettings.py
文件
系统要求
此包要求安装xmlsec
库。在
观点
此软件包提供两个视图:
login
-当用户试图直接登录到应用程序时,应该调用URL视图acs
-这个URL视图应该由SSO系统(Okta)调用
当用户试图使用login
时,视图将重定向用户的web
浏览器到SSO系统进行身份验证。一旦用户在进行身份验证
然后,SSO系统将调用acs
URL视图来登录
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
字典,
例如:
用户创建和配置通过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
- 项目
标签: