第 8 章 mod_auth_mellon Apache Module


mod_auth_mellon 是 Apache 的身份验证模块。如果您的语言/环境支持使用 Apache HTTPD 作为代理,您可以使用 mod_auth_mellon 使用 SAML 保护 Web 应用。有关此模块的更多详细信息,请参阅 mod_auth_mellon GitHub 仓库。

警告

Red Hat build of Keycloak 不提供对 mod_auth_mellon 的任何官方支持。以下说明是最佳的,可能不是最新的。本章假定服务器是 RHEL 系统。尽管其他 Linux 系统需要相似的步骤。为了获得更多详细信息,我们建议您使用官方的 mod_auth_mellon 文档。

要配置 mod_auth_mellon,您需要以下文件:

  • Identity Provider (IdP)实体描述符 XML 文件,该文件描述了与红帽构建的 Keycloak 或其他 SAML IdP 的连接
  • SP 实体描述符 XML 文件,该文件描述了您要保护的应用程序的 SAML 连接和配置。
  • 私钥 PEM 文件,这是 PEM 格式的文本文件,用于定义应用用于签署文档的私钥。
  • 证书 PEM 文件,它是为应用程序定义证书的文本文件。
  • mod_auth_mellon 特定的 Apache HTTPD 模块配置.

如果您已经在 Red Hat build of Keycloak Application server 的域中定义了并注册了客户端应用程序,则红帽构建的 Keycloak 可以生成除 Apache HTTPD 模块配置外所需的所有文件。

执行以下步骤来生成 Apache HTTPD 模块配置。

流程

  1. 进入 SAML 客户端的 Installation 页面。
  2. 选择 Mod Auth Mellon 文件选项。

    图 8.1. mod_auth_mellon config download

    下载 auth-melon 配置
  3. Download 下载包含 XML 描述符和 PEM 文件的 ZIP 文件。

8.1. 使用红帽构建的 Keycloak 配置 mod_auth_mellon

涉及两个主机:

  • 运行红帽构建的 Keycloak 的主机,它将被称为 $idp_host,因为红帽构建的 Keycloak 是一个 SAML 身份提供程序(IdP)。
  • 运行 Web 应用的主机,该主机将称为 $sp_host。在使用 IdP 的 SAML 应用程序中称为服务提供商(SP)。

以下所有步骤都需要以 root 特权在 $sp_host 上执行。

8.1.1. 安装软件包

要安装所需的软件包,您需要:

  • Apache Web Server (httpd)
  • Mellon SAML SP 附加组件模块
  • 创建 X509 证书的工具

要安装所需的软件包,请运行以下命令:

yum install httpd mod_auth_mellon mod_ssl openssl
Copy to Clipboard

8.1.2. 为 Apache SAML 创建配置目录

建议您将与 Apache 相关的配置文件保存在一个位置上。

在 Apache 配置根目录 /etc/httpd 下创建名为 saml2 的新目录:

mkdir /etc/httpd/saml2
Copy to Clipboard

8.1.3. 配置 Mellon 服务提供商

Apache 附加组件模块的配置文件位于 /etc/httpd/conf.d 目录中,文件名为 .conf。您需要创建 /etc/httpd/conf.d/mellon.conf 文件,并将 Mellon 的配置指令放在该文件中。

Mellon 的配置指令可大致分为两类信息:

  • 使用 SAML 身份验证保护的 URL
  • 引用受保护的 URL 时将使用哪些 SAML 参数。

Apache 配置指令通常遵循 URL 空间中的分级树结构,这些结构称为位置。您需要为 Mellon 指定一个或多个 URL 位置来保护。您具有如何添加应用到每个位置的配置参数的灵活性。您可以将所有必要的参数添加到 location 块中,也可以将 Mellon 参数添加到特定保护位置继承的 URL 位置层次结构中(或两者的某些组合)。由于 SP 常以同样的方式运行,无论哪个位置都触发 SAML 操作,因此此处使用的示例配置将常见 Mellon 配置指令放置在层次结构中的 root 中,然后使用 Mellon 保护的特定位置。此策略可避免为每个受保护的位置复制相同的参数。

这个示例只有一个受保护的位置:https://$sp_host/private。

要配置 Mellon 服务供应商,请执行以下步骤。

流程

  1. 使用以下内容创建文件 /etc/httpd/conf.d/mellon.conf
 <Location / >
    MellonEnable info
    MellonEndpointPath /mellon/
    MellonSPMetadataFile /etc/httpd/saml2/mellon_metadata.xml
    MellonSPPrivateKeyFile /etc/httpd/saml2/mellon.key
    MellonSPCertFile /etc/httpd/saml2/mellon.crt
    MellonIdPMetadataFile /etc/httpd/saml2/idp_metadata.xml
 </Location>
 <Location /private >
    AuthType Mellon
    MellonEnable auth
    Require valid-user
 </Location>
Copy to Clipboard
注意

后续步骤中会创建上述代码中引用的一些文件。

8.1.5. 创建服务提供商元数据

在 SAML IdP 和 SP 中,用于交换 SAML 元数据,它们是 XML 格式。元数据的 schema 是标准的,因此相关的 SAML 实体可以互相使用其元数据。您需要:

  • SP 使用的 IdP 的元数据
  • 描述 IdP 提供的 SP 的元数据

SAML 元数据的一个组件是 X509 证书。这些证书用于两个目的:

  • 为 SAML 信息签名,以便接收端可以证明来自预期方的消息。
  • 在传输过程中加密消息(很少使用,因为 SAML 消息通常在 TLS 保护的传输中发生)

如果您已拥有证书颁发机构(CA),也可以使用自己的证书,也可以生成自签名证书。在本示例中简单性,使用了自签名证书。

因为 Mellon 的 SP 元数据必须反映已安装 mod_auth_mellon 版本的功能,所以必须是有效的 SP 元数据 XML,且必须包含 X509 证书(创建错误时,除非您熟悉 X509 证书生成)最先生成 SP 元数据的方式是使用 mod_auth_mellon 软件包中包含的工具(mellon_create_metadata.sh)。之后,生成的元数据始终可以被编辑,因为它是一个文本文件。该工具还创建您的 X509 密钥和证书。

SAML IdP 和 SPs 使用称为 EntityID 的唯一名称来识别自己。要使用 Mellon 元数据创建工具,您需要:

  • EntityID,通常是 SP 的 URL,通常是可以检索 SP 元数据的 SP 的 URL
  • 将消耗 SP 的 SAML 消息的 URL,Mellon 调用 MellonEndPointPath。

要创建 SP 元数据,请执行以下步骤。

流程

  1. 创建几个帮助程序 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')"
    Copy to Clipboard
  2. 运行以下命令调用 Mellon 元数据创建工具:

    /usr/libexec/mod_auth_mellon/mellon_create_metadata.sh $mellon_entity_id $mellon_endpoint_url
    Copy to Clipboard
  3. 将生成的文件移动到其目的地(在上面创建的 /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.xml
    Copy to Clipboard

8.1.6. 将 Mellon Service Provider 添加到红帽构建的 Keycloak 身份提供程序中

假设:红帽构建的 Keycloak IdP 已在 $idp_host 上安装。

Red Hat build of Keycloak 支持多个租期,其中所有用户、客户端等都分组到一个域里。每个域都独立于其他域。您可以在红帽构建的 Keycloak 中使用现有域,但本示例演示了如何创建名为 test_realm 的新域,并使用该域。

所有这些操作都使用红帽构建的 Keycloak 管理控制台来执行。您必须具有 $idp_host 的 admin 用户名和密码才能执行以下步骤。

流程

  1. 打开 Admin Console 并通过输入 admin 用户名和密码登录。

    登录管理控制台后,将有一个现有的域。当首次设置根域 master 时,会默认创建 Red Hat build of Keycloak。任何之前创建的域都会在下拉列表中的 Admin Console 的左上角列出。

  2. 从 realm 下拉列表中,选择 Add realm
  3. 在 Name 字段中键入 test_realm,然后单击 Create

8.1.6.1. 添加 Mellon Service Provider 作为域的客户端

在 Red Hat build of Keycloak SAML SP 中,称为客户端。要添加 SP,我们必须在域的 Clients 部分中。

  1. 点左侧的 Clients 菜单项,然后点 Import client 按钮。
  2. Resource file 字段中,提供上面创建的 Mellon SP 元数据文件(/etc/httpd/saml2/mellon_metadata.xml)。

    根据浏览器的运行位置,您可能需要将 SP 元数据从 $sp_host 复制到运行浏览器的计算机,以便浏览器可以找到该文件。

  3. 点击 Save

8.1.6.2. 编辑 Mellon SP 客户端

使用这个流程设置重要的客户端配置参数。

流程

  1. 确保 Force POST Binding 为 On。
  2. 将 paosResponse 添加到 Valid Redirect URIs 列表中:
  3. 复制 Valid Redirect URI 中的 postResponse URL,并将它粘贴到 "+" 下的空添加文本字段中。
  4. postResponse 更改为 paosResponse'。(SAML ECP 需要 paosResponse URL。)
  5. 点底部的 Save

许多 SAML SP 根据组中的用户成员资格决定授权。红帽 Keycloak IdP 的构建可以管理用户组信息,但不会提供用户组,除非 IdP 配置为将其作为 SAML 属性提供。

执行以下步骤将 IdP 配置为将用户组作为 SAML 属性提供。

流程

  1. 点客户端的 Client scopes 选项卡。
  2. 点 dedicated 范围放置在第一行中。
  3. 在 Mappers 页面中,单击 Add mapper 按钮并选择 By configuration
  4. 从 Mapper Type 列表中,选择 Group 列表
  5. 将 Name 设置为 组列表
  6. 将 SAML 属性名称设置为
  7. 点击 Save

剩余的步骤在 $sp_host 上执行。

8.1.6.3. 检索身份提供程序元数据

现在,您已在 IdP 上创建域,您需要检索与之关联的 IdP 元数据,以便 Mellon SP 识别它。在之前创建的 /etc/httpd/conf.d/mellon.conf 文件中,MellonIdPMetadataFile 指定为 /etc/httpd/saml2/idp_metadata.xml,直到该文件在 $sp_host 上不存在。

使用这个流程从 IdP 检索该文件。

流程

  1. 使用这个命令,使用 $idp_host 的正确值替换:

    curl -k -o /etc/httpd/saml2/idp_metadata.xml \
    https://$idp_host/realms/test_realm/protocol/saml/descriptor
    Copy to Clipboard

    Mellon 现已全面配置。

  2. 要运行 Apache 配置文件的语法检查,请使用以下命令:

    apachectl configtest
    Copy to Clipboard
    注意

    configtest 等同于 apachectl 的 -t 参数。如果配置测试显示任何错误,请在继续操作前进行更正。

  3. 重启 Apache 服务器:

    systemctl restart httpd.service
    Copy to Clipboard

现在,您已在 test_realm 和 mod_auth_mellon 中将红帽构建的 Keycloak 设置为 SAML IdP,通过针对 $idp_host IdP 进行身份验证来保护 URL $sp_host/protected (及其下的所有内容)。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat