跳转到主要内容

plone站点的SAML身份验证

项目描述

wcs.samlauth

wcs.samlauth是一个基于python3-saml的plone 6 SAML身份验证插件。它将您的plone站点转换为SP(服务提供商)。不支持IDP(身份提供者)。

该软件包已在plone 6和python 3.11上进行了测试。它不支持其他版本。

目标

尽可能简化配置plone作为SP(服务提供商)的过程,而无需深入了解SAML及其底层工作原理。此软件包使用python3-saml的高级API,使其易于配置和使用。

TL;DR

  1. 安装wcs.samlauth插件
  2. 通过ZMI(在acl_users中)添加PAS插件
  3. 转到http://localhost:8080/Plone/acl_users/saml/idp_metadata
  4. 获取或上传IDP元数据 -> 点击“获取并存储元数据”
  5. 转到http://localhost:8080/Plone/acl_users/saml/metadata并配置您的IDP
  6. 使用http://localhost:8080/Plone/acl_users/saml/sls通过IDP登录

架构

该插件基于类似于pas.plugins.oidc的架构/概念。这意味着所有端点都直接在插件上。插件不会覆盖plones的登录/注销视图。这取决于您。如果您只有一个saml插件,则可以启用“挑战”插件,该插件将重定向到saml登录端点。

这使您能够添加多个saml插件。

依赖项

请参阅python3-saml,特别确保以下包可以安装,因为它们还有一些系统依赖

例如,在最近的Ubuntu上,你应该运行

apt install pkg-config libxml2-dev libxmlsec1-dev libxmlsec1-openssl

端点

假设SAML插件的ID是"saml"

特性

  • 通过IDP元数据端点获取和存储IDP元数据
  • 通过文件上传上传和存储IDP元数据
  • 同时使用多个saml插件
  • 实现了python3-saml几乎所有的功能,包括AuthnRequest和元数据的SP签名
  • 创建Plone会话和/或restapi令牌
  • 启用/禁用Plone用户的创建
  • 自动更新用户数据(硬编码,目前限于电子邮件和全名)
  • 启用/禁用对authn请求的验证(使用临时的__samlcookie)
  • 通过验证RelayState参数和一个“允许”的域列表来防止重定向攻击,我们可以重定向到这些域
  • 使用Keykloak作为IDP在不同配置变体上进行端到端测试
  • 使用Azure AD作为IDP手动测试
  • 文档使用azure和keycloak作为IDP

安装

将插件添加到您的buildout中

[buildout]

...

eggs =
    wcs.samlauth

将wcs.samlauth添加到Plone docker镜像中

$ docker run -p 8080:8080 -e SITE="mysite" -e ADDONS="wcs.samlauth" plone

从ZMI转到acl_users并添加saml插件。

开发

最好使用本地IDP,例如keycloak,以便更改此包。

使用docker启动本地keycloak服务器

$ docker run -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:22.0.2 start-dev

安装并运行测试Plone实例

$ git clone git@github.com:webcloud7/wcs.samlauth.git && cd wcs.samlauth
$ make install
$ make run

测试

您需要一个本地的docker安装来运行测试。

该包提供了一个docker测试层,该层启动keycloak并将各种配置文件加载到keycloak中。

$ make test

运行单个测试

$ ./bin/test -t test_whatever

如何操作

tests/assets文件夹包含一些您可以用于测试设置的keycloak配置。它包括带有SP签名autn请求和元数据的示例。

以下示例不使用大多数IDP所需的特定saml功能。

手动配置

您也可以手动配置一切。有关详细信息,请参阅python3-saml文档

配置需要在saml插件的属性选项卡上直接应用。

使用keycloak作为IDP进行配置

在acl_users中通过ZMI创建一个新的saml pas插件

IDP部分在keycloak上

  1. 登录到您的Keycloak管理控制台。

  2. 创建一个新的领域或使用已存在的领域。如果没有,创建一个测试用户。

  3. 使用http://localhost:8080/Plone/acl_users/saml/metadata中的数据创建一个新的客户端。

    客户端类型是SAML。

    重要提示:客户端ID与SAML的EntityID相同。例如 http://localhost:8080/keycloak/acl_users/saml/metadata

    Create keycloak client

    点击“下一步”

  4. 配置主页URL和有效重定向URL

    Configure keycloak

    点击“保存”

  5. 转到“密钥”选项卡并禁用“客户端签名要求”

    Disable signing

  6. 配置属性绑定

    在“客户端作用域”下,点击以/metadata-dedicated 结尾的URL

    Disable signing

    点击“添加预定义映射器”

    选择以下映射器 禁用签名

    点击“添加”

  7. 转到“高级”选项卡并配置注销服务重定向绑定(python3-saml仅支持此处重定向绑定)

    Configure keycloak advanced

  8. 复制SAML配置元数据URL

    copy url

您的Plone站点的SP部分

  1. 转到URL: http://localhost:8080/Plone/acl_users/saml/idp_metadata

    输入URL并点击“获取并存储元数据”

    copy url

    提示:Keycloak有硬编码的authnRequestsSigned: true

这就完成了!! 前往 http://localhost:8080/Plone/acl_users/saml/sls 通过Azure登录

如果这是您站点上唯一的SAML插件,并且希望所有用户都通过SAML登录,则可以启用挑战插件并更改您Plone站点上的登录和注销操作以使用SAML端点。

以Azure作为IDP进行配置

这是一个教程,说明如何配置Azure云企业应用作为此插件的IDP。

在Azure云中的IDP部分

  1. 转到您的Azure AD并创建一个新的企业应用。

    Create azure enterprise app

  2. 转到“单一登录”部分。

    SSO section

  3. 向应用添加SAML认证。

    Add SAML

  4. 从SAML插件收集元数据。

    URL: http://localhost:8080/Plone/acl_users/saml/metadata

    Get metadata

  5. 手动编辑“基本SAML配置”(信息可以从SP元数据xml中获取)

    添加EntityID和ACS。可选地,还可以添加注销URL。Azure需要https,因此根据您的设置,可以将其留空。

    Edit basic saml

  6. 编辑“属性和声明”

    该插件仅支持电子邮件地址、给定名称和姓氏。您可以配置更多属性,但它们将被忽略。

    重要:声明名称需要给定Name、surename和email。此外,删除命名空间并留空。

    Edit attrs

  7. 下载联盟元数据XML

    Download metadata

您的Plone站点的SP部分

  1. 转到URL: http://localhost:8080/Plone/acl_users/saml/idp_metadata

    从IDP(Azure)上传并存储配置

    Upload xml

  2. 上传表单还会显示从元数据XML收集的信息以及将存储在您的SAML插件中的信息

    Info xml

这就完成了!! 前往 http://localhost:8080/Plone/acl_users/saml/sls 通过Azure登录

如果这是您站点上唯一的SAML插件,并且希望所有用户都通过SAML登录,则可以启用挑战插件并更改您Plone站点上的登录和注销操作以使用SAML端点。

变更日志

1.0.0a4 (2024-02-20)

  • 不要在回调URL中使用SCRIPT_NAME。[mathias.leimgruber]

1.0.0a3 (2023-09-28)

  • 修复布尔属性中的拼写错误。[mathias.leimgruber]

1.0.0a2 (2023-09-28)

  • 禁用acs(回调视图)上的csrf保护。[mathias.leimgruber]

1.0.0a1 (2023-09-28)

  • 初始发布 [mathias.leimgruber]

项目详情


下载文件

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

源分布

wcs.samlauth-1.0.0a4.tar.gz (1.2 MB 查看散列)

上传

由以下机构支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误记录 StatusPage StatusPage 状态页面