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
- 安装wcs.samlauth插件
- 通过ZMI(在acl_users中)添加PAS插件
- 转到http://localhost:8080/Plone/acl_users/saml/idp_metadata
- 获取或上传IDP元数据 -> 点击“获取并存储元数据”
- 转到http://localhost:8080/Plone/acl_users/saml/metadata并配置您的IDP
- 使用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"
- 在http://localhost:8080/Plone/acl_users/saml/metadata上公开SP元数据
- SP元数据部分是自动生成的,部分是静态的。entityId、assertionConsumerService和singleLogoutService是自动生成的
- SAML登录端点是http://localhost:8080/Plone/acl_users/saml/sls
- SAML ACS端点是http://localhost:8080/Plone/acl_users/saml/acs
- SAML注销端点是http://localhost:8080/Plone/acl_users/saml/slo
- SAML SP启动的注销端点是http://localhost:8080/Plone/acl_users/saml/logout
- 获取IDP元数据http://localhost:8080/Plone/acl_users/saml/idp_metadata
特性
- 通过IDP元数据端点获取和存储IDP元数据
- 通过文件上传上传和存储IDP元数据
- 同时使用多个saml插件
- 实现了python3-saml几乎所有的功能,包括AuthnRequest和元数据的SP签名
- 创建Plone会话和/或restapi令牌
- 启用/禁用Plone用户的创建
- 自动更新用户数据(硬编码,目前限于电子邮件和全名)
- 启用/禁用对authn请求的验证(使用临时的
__saml
cookie) - 通过验证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上
-
登录到您的Keycloak管理控制台。
-
创建一个新的领域或使用已存在的领域。如果没有,创建一个测试用户。
-
使用http://localhost:8080/Plone/acl_users/saml/metadata中的数据创建一个新的客户端。
客户端类型是SAML。
重要提示:客户端ID与SAML的
EntityID
相同。例如 http://localhost:8080/keycloak/acl_users/saml/metadata点击“下一步”
-
配置主页URL和有效重定向URL
点击“保存”
-
转到“密钥”选项卡并禁用“客户端签名要求”
-
配置属性绑定
在“客户端作用域”下,点击以/metadata-dedicated 结尾的URL
点击“添加预定义映射器”
选择以下映射器
点击“添加”
-
转到“高级”选项卡并配置注销服务重定向绑定(python3-saml仅支持此处重定向绑定)
-
复制SAML配置元数据URL
您的Plone站点的SP部分
-
转到URL: http://localhost:8080/Plone/acl_users/saml/idp_metadata
输入URL并点击“获取并存储元数据”
提示:Keycloak有硬编码的
authnRequestsSigned: true
。
这就完成了!! 前往 http://localhost:8080/Plone/acl_users/saml/sls 通过Azure登录
如果这是您站点上唯一的SAML插件,并且希望所有用户都通过SAML登录,则可以启用挑战插件并更改您Plone站点上的登录和注销操作以使用SAML端点。
以Azure作为IDP进行配置
这是一个教程,说明如何配置Azure云企业应用作为此插件的IDP。
在Azure云中的IDP部分
-
转到您的Azure AD并创建一个新的企业应用。
-
转到“单一登录”部分。
-
向应用添加SAML认证。
-
从SAML插件收集元数据。
URL: http://localhost:8080/Plone/acl_users/saml/metadata
-
手动编辑“基本SAML配置”(信息可以从SP元数据xml中获取)
添加EntityID和ACS。可选地,还可以添加注销URL。Azure需要https,因此根据您的设置,可以将其留空。
-
编辑“属性和声明”
该插件仅支持电子邮件地址、给定名称和姓氏。您可以配置更多属性,但它们将被忽略。
重要:声明名称需要给定Name、surename和email。此外,删除命名空间并留空。
-
下载联盟元数据XML
您的Plone站点的SP部分
-
转到URL: http://localhost:8080/Plone/acl_users/saml/idp_metadata
从IDP(Azure)上传并存储配置
-
上传表单还会显示从元数据XML收集的信息以及将存储在您的SAML插件中的信息
这就完成了!! 前往 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的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | dc88ef75c2944d7d596eaa7149d0c96909185146857a9e08100a39b475900f65 |
|
MD5 | 05ec74dd32904569d3c03e1d3707dcbd |
|
BLAKE2b-256 | a3d49ed94446cd77e246ad00358fbed52f9eab910a30351c99942a189190dcb0 |