3.2. mod_auth_mellon Apache HTTPD Module
mod_auth_mellon 模块是 SAML 的 Apache HTTPD 插件。如果您的语言/环境支持使用 Apache HTTPD 作为代理,则可使用 mod_auth_mellon 来使用 SAML 保护 Web 应用程序。有关此模块的详情请查看 mod_auth_mellon GitHub 仓库。
要配置 mod_auth_mellon,您需要:
- Identity Provider(IdP)实体描述符 XML 文件,描述与 Red Hat Single Sign-On 或其他 SAML IdP 的连接
- SP 实体描述符 XML 文件,描述您要保护的应用程序的 SAML 连接和配置。
- 私钥 PEM 文件,它是 PEM 格式的文本文件,用于定义应用用于签名文档的私钥。
- 证书 PEM 文件,这是为应用程序定义证书的文本文件。
- mod_auth_mellon 特定的 Apache HTTPD 模块配置。
3.2.1. 使用红帽单点登录配置 mod_auth_mellon 复制链接链接已复制到粘贴板!
涉及两个主机:
- 运行 Red Hat Single Sign-On 的主机,它被称为 $idp_host,因为红帽单点登录是一个 SAML 身份提供程序(IdP)。
- 运行 web 应用的主机,其称为 $sp_host。在使用 IdP 的 SAML 应用程序中称为服务提供商(SP)。
以下所有步骤需要在带有 root 权限的 $sp_host 上执行。
3.2.1.1. 安装软件包 复制链接链接已复制到粘贴板!
要安装所需的软件包,您需要:
- Apache Web 服务器(httpd)
- Apache 的 Mellon SAML SP 附加组件模块
- 创建 X509 证书的工具
要安装所需的软件包,请运行以下命令:
yum install httpd mod_auth_mellon mod_ssl openssl
yum install httpd mod_auth_mellon mod_ssl openssl
3.2.1.2. 为 Apache SAML 创建配置目录 复制链接链接已复制到粘贴板!
建议把配置文件与 Apache 使用 SAML 保存在一个位置。
在 Apache 配置根 /etc/httpd 下创建名为 saml2 的新目录:
mkdir /etc/httpd/saml2
mkdir /etc/httpd/saml2
3.2.1.3. 配置 Mellon Service Provider 复制链接链接已复制到粘贴板!
Apache 附加组件模块的配置文件位于 /etc/httpd/conf.d 目录中,文件名扩展名为 .conf。您需要创建 /etc/httpd/conf.d/mellon.conf 文件,并在其中放置 Mellon 的配置指令。
Mellon 的配置指令可以大致分为两类信息:
- 要使用 SAML 身份验证保护的 URL
- 在引用受保护的 URL 时,将使用什么 SAML 参数。
Apache 配置指令通常遵循 URL 空间中的分级树结构,它们称为位置。您需要为 Mellon 指定一个或多个 URL 位置来保护。您在添加适用于每个位置的配置参数方面具有灵活性。您可以将所有必要的参数添加到位置块,或者您可以将 Mellon 参数添加到特定保护位置继承的 URL 位置分级(或这两者的某些组合)中。由于 SP 通常会以相同的方式运行:无论哪个位置触发 SAML 操作,因此这里使用的示例配置指令放在层次结构根中,然后使用 Mellon 对特定位置进行保护,那么可以使用最小的指令来定义特定位置。此策略可避免为每个受保护的位置重复相同的参数。
这个示例只有一个受保护的位置:https://$sp_host/private。
要配置 Mellon 服务提供程序,请执行以下步骤。
流程
- 创建包含以下内容的文件 /etc/httpd/conf.d/mellon.conf:
上述代码中引用的某些文件将在后续步骤中创建。
3.2.2. 为 mod_auth_mellon 使用的 cookie 设置 SameSite 值 复制链接链接已复制到粘贴板!
浏览器计划将 Cookie 的 SameSite 属性的默认值设置为 Lax。此设置表示,仅当请求源自于同一域中时,cookies 才会发送到应用程序。这个行为可能会影响 SAML POST 绑定,这可能会变为无法正常工作。要保留 mod_auth_mellon 模块的完整功能,我们建议将 mod_auth_mellon 创建的 cookie 的 SameSite 值设置为 None。不这样做可能会导致无法使用 Red Hat Single Sign-On 进行登录。
要将 SameSite 值设为 None,请将以下配置添加到 mellon.conf 文件中的 <Location / > tag。
MellonSecureCookie On MellonCookieSameSite none
MellonSecureCookie On
MellonCookieSameSite none
对此配置的支持在 0.16.0 版的 mod_auth_mellon 模块中可用。
3.2.2.1. 创建服务提供商元数据 复制链接链接已复制到粘贴板!
在 SAML IdP 和 SP 交换 SAML 元数据中,采用 XML 格式。元数据的 schema 是标准的,因此相关的 SAML 实体可以互相使用其元数据。您需要:
- SP 使用的 IdP 元数据
- 描述提供给 IdP 的 SP 元数据
SAML 元数据的一个组件是 X509 证书。这些证书用于两个目的:
- 为 SAML 信息签名,以便接收最终能够证明该消息源自预期方。
- 在传输期间加密消息(这些ldom 使用,因为 SAML 信息通常在 TLS 保护的传输中发生)
如果您已有证书颁发机构(CA),或者您可以生成自签名证书,您可以使用自己的证书。为了便于本例中使用自签名证书。
因为 Mellon 的 SP 元数据必须反映安装的 mod_auth_mellon 版本的功能,所以必须是有效的 SP 元数据 XML,并且必须包含 X509 证书(除非熟悉了 X509 证书),以便生成 SP 元数据,以便使用在 mod_auth_llme_llme_onme_onme_onme_onme_on_onme_onme_on_on_on_on_on_on_on_on_on_create_on_on_on。生成的元数据总是可以被编辑,因为它是一个文本文件。该工具还创建您的 X509 密钥和证书。
SAML IdP 和 SP 使用唯一名称标识自己,称为 EntityID。要使用 Mellon 元数据创建工具:
- EntityID(通常是 SP 的 URL),通常是 SP 的 URL,通常是可以检索 SP 元数据的 URL
- 用于 SP 的 SAML 消息的 URL 将被消耗,Mononon 调用 MellonEndPointPath。
要创建 SP 元数据,请执行以下步骤。
流程
创建几个 helper shell 变量:
fqdn=`hostname` mellon_endpoint_url="https://${fqdn}/mellon" mellon_entity_id="${mellon_endpoint_url}/metadata" file_prefix="$(echo "$mellon_entity_id" | sed 's/[^A-Za-z.]/_/g' | sed 's/__*/_/g')"fqdn=`hostname` mellon_endpoint_url="https://${fqdn}/mellon" mellon_entity_id="${mellon_endpoint_url}/metadata" file_prefix="$(echo "$mellon_entity_id" | sed 's/[^A-Za-z.]/_/g' | sed 's/__*/_/g')"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令调用 Mellon 元数据创建工具:
/usr/libexec/mod_auth_mellon/mellon_create_metadata.sh $mellon_entity_id $mellon_endpoint_url
/usr/libexec/mod_auth_mellon/mellon_create_metadata.sh $mellon_entity_id $mellon_endpoint_urlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将生成的文件移动到其目的地(参考在上面创建的 /etc/httpd/conf.d/mellon.conf 文件中):
mv ${file_prefix}.cert /etc/httpd/saml2/mellon.crt mv ${file_prefix}.key /etc/httpd/saml2/mellon.key mv ${file_prefix}.xml /etc/httpd/saml2/mellon_metadata.xmlmv ${file_prefix}.cert /etc/httpd/saml2/mellon.crt mv ${file_prefix}.key /etc/httpd/saml2/mellon.key mv ${file_prefix}.xml /etc/httpd/saml2/mellon_metadata.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2.2. 将 Mellon Service Provider 添加到红帽单点登录身份提供程序 复制链接链接已复制到粘贴板!
假设:Red Hat Single Sign-On IdP 已在 $idp_host 上安装。
Red Hat Single Sign-On 支持将所有用户、客户端等多个租户分组到称为域的域中。每个 realm 都是相互独立的。您可以在红帽单点登录中使用现有域,但本例演示了如何创建名为 test_realm 的新域,并使用该域。
所有这些操作都使用红帽单点登录管理控制台执行。您必须具有 $idp_host 的 admin 用户名和密码才能执行以下步骤。
流程
打开 Admin Console 并通过输入 admin 用户名和密码登录。
登录 Admin 控制台后,会有一个现有的 realm。当首先设置 Red Hat Single Sign-On 时,会创建根域 master。所有之前创建的域都在下拉列表中的 Admin Console 左上角列出。
- 从 realm 下拉列表中,选择 Add realm。
-
在 Name 字段中,键入
test_realm,再点击 Create。
3.2.2.2.1. 添加 Mellon Service Provider 作为域的客户端 复制链接链接已复制到粘贴板!
在红帽单点登录 SAML SP 中,称为客户端。要添加 SP,我们必须在域的 Clients 部分中。
- 单击左侧的 Clients 菜单项,再单击右上角的 Create 来创建新客户端。
3.2.2.2.2. 添加 Mellon SP 客户端 复制链接链接已复制到粘贴板!
要添加 Mellon SP 客户端,请执行以下步骤。
流程
- 将客户端协议设置为 SAML。
- 从 Client Protocol 下拉列表中选择 saml。
提供上述创建的 Mellon SP 元数据文件(/etc/httpd/saml2/mellon_metadata.xml)。
根据您的浏览器运行位置,您可能需要将 SP 元数据从 $sp_host 复制到运行浏览器的计算机,以便浏览器可以找到该文件。
- 点击 Save。
3.2.2.2.3. 编辑 Mellon SP 客户端 复制链接链接已复制到粘贴板!
使用这个流程设置重要的客户端配置参数。
流程
- 确保"Force POST Binding"为 On。
- 将 paosResponse 添加到 Valid Redirect URIs 列表中:
- 复制"Valid Redirect URI"中的 postResponse URL,并将它粘贴到"+"下面的空白添加文本字段。
- 将"postResponse"更改为"paosResponse"。( SAML ECP 需要 paosResponse URL。)
- 点底部的 Save。
许多 SAML SP 根据用户在组中的成员资格来确定授权。Red Hat Single Sign-On IdP 可以管理用户组信息,除非 IdP 配置为为其提供 SAML 属性,否则不会为用户提供组。
执行以下步骤将 IdP 配置为将用户组作为 SAML 属性提供。
流程
- 点客户端的映射程序选项卡。
- 在映射程序页面的右上角,点 Create。
- 从 Mapper Type 下拉列表中选择 组列表。
- 将 Name 设置为 "group list"。
- 将 SAML 属性名称设置为 "groups"。
- 点击 Save。
剩余的步骤在 $sp_host 上执行。
3.2.2.2.4. 检索身份提供程序元数据 复制链接链接已复制到粘贴板!
现在,您已在 IdP 中创建域,您需要检索与其关联的 IdP 元数据,以便 Mellon SP 可以识别它。在之前创建的 /etc/httpd/conf.d/mellon.conf 文件中,MellonIdPMetadataFile 指定为 /etc/httpd/saml2/idp_metadata.xml,直到现在该文件在 $sp_host 上不存在。
使用这个流程从 IdP 检索该文件。
流程
使用这个命令,用 $idp_host 的正确值替换:
curl -k -o /etc/httpd/saml2/idp_metadata.xml \ https://$idp_host/auth/realms/test_realm/protocol/saml/descriptor
curl -k -o /etc/httpd/saml2/idp_metadata.xml \ https://$idp_host/auth/realms/test_realm/protocol/saml/descriptorCopy to Clipboard Copied! Toggle word wrap Toggle overflow Mellon 现在被完全配置。
要对 Apache 配置文件运行语法检查,请使用以下命令:
apachectl configtest
apachectl configtestCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意configtest 等同于 apachectl 的 -t 参数。如果配置测试显示任何错误,请在继续操作前进行更正。
重启 Apache 服务器:
systemctl restart httpd.service
systemctl restart httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您已将 Red Hat Single Sign-On 设置为 test_realm 和 mod_auth_mellon 中的 SAML IdP,作为 SAML SP 保护 URL $sp_host/ Protection(以及它下的所有内容)与 $idp_host IdP 进行身份验证。