Skip to main content

用于运行一个或多个 SAML 服务提供者 (SP) 的 Django 应用程序。

项目描述

安装

  • pip install django-saml-sp
  • 添加sp到您的INSTALLED_APPS设置

本地测试申请

启动本地 SimpleSAML IdP

docker run -it --rm -p 8080:8080 -p 8443:8443 \
-e SIMPLESAMLPHP_SP_ENTITY_ID=http://localhost:8000/sso/local/ \
-e SIMPLESAMLPHP_SP_ASSERTION_CONSUMER_SERVICE=http://localhost:8000/sso/local/acs/ \
-e SIMPLESAMLPHP_SP_SINGLE_LOGOUT_SERVICE=http://localhost:8000/sso/local/slo/ \
kristophjunge/test-saml-idp

引导并运行本地 SP 测试应用程序

python manage.py migrate
python manage.py bootstrap
python manage.py runserver

测试 SAML IdP 定义了可用于测试的以下用户帐户:

用户标识符 用户名 密码 团体 电子邮件
1 用户1 user1pass 组 1 user1@example.com
2 用户2 user2pass 组2 user2@example.com

Sustainsys 存根 IdP

bootstrap 命令还创建一个stub通过 https://stubidp.sustainsys.com进行身份验证的 IdP 。如果您不想运行自己的本地身份提供程序进行测试,这是一个不错的选择。

集成指南

Django 设置

  • AUTHENTICATION_BACKENDS- 默认情况下,Django 身份验证系统用于对用户进行身份验证和登录。添加sp.backends.SAMLAuthenticationBackend到您的AUTHENTICATION_BACKENDS设置以使用 Django 的User模型进行身份验证。User.USERNAME_FIELD使用匹配 SAML查找用户nameid,如果它不存在,则可以选择创建它。请参阅下面的字段映射部分,了解如何将 SAML 属性映射到User属性。
  • LOGIN_REDIRECT_URL- 这是用户在成功登录(或验证)后默认重定向到的 URL。如果您在登录 URL 中设置IdP.login_redirect或指定参数,则为可选。next
  • LOGOUT_REDIRECT_URL- 这是用户在成功注销后默认重定向到的 URL。如果您在注销 URL 中设置IdP.logout_redirect或指定参数,则为可选。next
  • SESSION_SERIALIZER- 默认情况下,Django 使用django.contrib.sessions.serializers.JSONSerializer,它不允许在会话上设置特定的到期日期。如果您想使用该IdP.respect_expiration标志让 IdP 指示 Django 会话何时到期,您应该将其更改为django.contrib.sessions.serializers.PickleSerializer. 但是,如果您不打算使用该功能,请保留默认值。

SP 设置

  • SP_IDP_LOADER- 允许您为 SP 视图指定自定义方法,以在IdP给定请求和 URL 路径参数的情况下检索实例。
  • SP_AUTHENTICATE- 用于IdP未指定的实例的自定义身份验证方法。默认情况下,sp.utils.authenticate使用(委托给身份验证后端)。
  • SP_LOGIN- 用于IdP未指定的实例的自定义登录方法。默认情况下,sp.utils.login使用(同样,委托给 auth 后端)。
  • SP_LOGOUT- 用于IdP未指定的实例的自定义注销方法。默认情况下,sp.utils.logout使用它,它只是委托给 Django 的auth.logout.
  • SP_UNIQUE_USERNAMES- 当True(默认值)时,SAMLAuthenticationBackend将生成对IdP他们进行身份验证的唯一用户名,无论是在关联现有用户还是创建新用户时。这可以防止用户帐户链接到多个 IDP(如果可以配置不受信任的 IDP,则可以防止欺骗)。

网址

该应用程序附带一个可以包含的 URLconf,使用您想要的任何路径参数。通过IdP将任何 URL 参数与url_params字段匹配(或通过SP_IDP_LOADER上面的某些自定义方式)来获取。例如:

path("<prefix>/sso/<idp_slug>/", include("sp.urls"))

假设上面的 URL 配置,并且IdP配置了url_params={"prefix": "my", "idp_slug": "local"},以下 URL 将可用:

网址 描述
/my/sso/local/ 实体 ID 和元数据 URL。访问这将生成元数据 XML,您可以将其提供给 IdP 管理员。
/my/sso/local/acs/ 断言消费者服务 (ACS)。这是 IdP 在成功登录后将发布到的内容。
/my/sso/local/slo/ 单一注销服务 (SLO)。注销所有 SSO 服务时,IdP 将重定向到此 URL。
/my/sso/local/login/ 触发此 IdP 登录序列的 URL。以编程方式提供为idp.get_login_url(). next接受登录后重定向到的参数。还需要一个reauth参数来强制 IdP 再次请求凭据(另请参见下面的验证 URL)。
/my/sso/local/test/ 触发 IdP 登录并显示包含传回的所有 SAML 属性的测试页面的 URL。以编程方式提供为idp.get_test_url(). 实际上并不执行 Django 用户登录。
/my/sso/local/verify/ 触发此 IdP 验证序列的 URL。以编程方式提供为idp.get_verify_url(). 不执行 Django 用户登录,但会检查 IdP 认证的用户是否与当前的request.user.
/my/sso/local/logout/ 触发此 IdP 的注销序列的 URL。以编程方式提供为idp.get_logout_url(). 接受一个next参数以在注销后重定向到。

如果只需要一个(它应该有),您也可以sp.urls不包含任何 URL 参数(例如)。path("sso/", include("sp.urls"))IdPurl_params={}

配置身份提供者 (IdP)

  1. IdP通过 Django 管理员或以编程方式创建模型对象。如果您有来自 IdP 的元数据,您现在可以输入 URL 或 XML,但这不是必需的。
  2. 生成证书以用于您的 SP 和此 IdP 之间的 SAML 请求。您可以为此使用内置的管理操作,方法是转到身份提供者的 Django 管理页面,检查所需的行,然后从操作下拉列表中选择“生成证书”。如果您已经有要使用的证书,则可以将其粘贴到相应的字段中。
  3. 为您的 IdP 管理员提供实体 ID/元数据 URL 和 ACS URL,如果他们需要明确允许访问或为您提供属性。
  4. 此时,如果您没有在步骤 1 中输入,则需要直接输入 IdP 元数据 URL 或元数据 XML。保存将自动触发 IdP 元数据的导入,因此如果成功,您应该会看到上次导入日期更新。还有一个“导入元数据”管理操作可以手动触发。

您的 IdP 现在已准备好进行测试。在您的 IdP 对象的管理页面上,右上角有一个“测试 IdP”按钮。您也可以.../test/手动访问 URL(见上文)以启动测试。IdP 的成功测试将显示一个包含 IdP 提供的 NameID 和 SAML 属性的页面。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

内置分布

django_saml_sp-0.5.0-py3-none-any.whl (25.9 kB 查看哈希

已上传 py3