示例 SSO 实现
在此示例中,SSO 通过使用 SUSE Multi-Linux Manager 公开三个端点,并使用 Keycloak 26.5.3 或更高版本作为身份服务提供者 (IdP) 来实现。
要使用 SUSE Multi-Linux Manager 和 Keycloak 设置单点登录 (SSO),您首先需要配置 Keycloak 身份提供者,获取其公共 SAML 证书,并设置客户端和用户。之后,您需要配置 SUSE Multi-Linux Manager 服务器以信任 Keycloak。
|
此示例仅用于说明目的。SUSE 不建议也不支持第三方身份服务提供者,并且与 Keycloak 不存在从属关系。 有关 Keycloak 支持,请参见 https://www.keycloak.org/. |
您可以直接在您的机器上安装 Keycloak,或在容器中运行它。 在此示例中,我们在 Podman 容器中运行 Keycloak。 有关安装 Keycloak 的更多信息,请参见 https://www.keycloak.org/guides#getting-started. 的 Keycloak 文档。
1. 设置身份服务提供者 (Keycloak)
首先,运行 Keycloak,创建一个领域,获取 SAML 公共证书,并配置客户端。
根据 Keycloak 文档所述在 Podman 容器中安装 Keycloak。
使用
-td参数运行容器,以确保进程保持运行:podman run -td --name keycloak -p 8080:8080 -e KEYCLOAK_ADMIN=admin -e KEYCLOAK_ADMIN_PASSWORD=admin quay.io/keycloak/keycloak:26.1.1 start-dev以
admin用户身份登录 Keycloak 管理控制台。创建一个领域:
在左上角,点击领域选择器下拉菜单(显示
master)并选择Manage realms。在
Manage realms页面上,点击右上角的 创建领域 按钮。在
Realm name字段中,输入名称(例如MLM)。单击 创建。
获取 SAML 公共证书:
从左侧导航菜单中,点击 领域设置。
点击
Keys选项卡。在活动密钥表中找到活动的 RSA 密钥(提供者为
rsa-generated)。点击该行中的 证书 按钮。
从打开的模态框中复制整个 Base64 编码的证书。请妥善保存此证书,以备服务器配置使用。
将 SUSE Multi-Linux Manager 添加为客户端:
在左侧导航菜单中,单击 客户端。
点击 创建客户端。
在
Client type字段中,选择SAML。在
Client ID字段中,输入 SUSE Multi-Linux Manager 元数据端点。 例如:https://<FQDN_MLM>/rhn/manager/sso/metadata单击 下一步。
在
Valid redirect URIs字段中,输入 SUSE Multi-Linux Manager 断言消费者服务 (ACS) 端点。 例如:https://<FQDN_MLM>/rhn/manager/sso/acs单击 保存。
微调客户端设置:
在
Settings选项卡下,向下滚动到SAML capabilities部分:
将
Sign assertions切换为On。在
Signature algorithm字段中,选择RSA_SHA1。在
SAML Signature Key Name字段中,选择Key ID。单击 保存。
在
Keys选项卡下:
将
Client signature required切换为Off。在
Advanced选项卡下,向下滚动到Fine Grain SAML Endpoint Configuration部分:
在
Assertion Consumer Service POST Binding URL和Assertion Consumer Service Redirect Binding URL字段中,输入 SUSE Multi-Linux Manager ACS 端点。 例如:https://<FQDN_MLM>/rhn/manager/sso/acs在
Logout Service POST Binding URL字段中,输入 SUSE Multi-Linux Manager SLS 端点。 例如:https://<FQDN_MLM>/rhn/manager/sso/sls在
Logout Service Redirect Binding URL字段中,输入您的 SUSE Multi-Linux Manager 实例的根 URL。 例如:https://<FQDN_MLM>/单击 保存。
配置客户端范围和映射程序:
从左侧导航菜单,单击 客户端范围。
单击列表中的
role_list。单击
Mappers选项卡,然后单击role list映射器。将
Single Role Attribute切换为On,然后单击 保存。返回 客户端,单击您的 SUSE Multi-Linux Manager 客户端 ID (
https://<FQDN_MLM>/rhn/manager/sso/metadata),然后单击Client scopes选项卡。单击专用范围(例如,
https://<FQDN_MLM>/rhn/manager/sso/metadata-dedicated)。单击 配置新映射器。
从列表中选择
User Attribute,并使用以下详细信息配置映射器:
在
Name字段中,输入uid。在
Property字段中,选择username。在
SAML Attribute Name字段中,输入uid。单击 保存。
创建用户:
从左侧导航菜单中,单击 用户。
单击 添加用户。
在
Username字段中,输入与现有 SUSE Multi-Linux Manager 用户匹配的用户名(例如,管理用户)。单击 创建。
单击
Credentials选项卡,单击 设置密码,为用户设置密码,将Temporary切换为Off,单击 保存 并通过单击 保存密码 进行确认。
2. 设置 SUSE Multi-Linux Manager 服务器
Keycloak 就绪后,配置 SUSE Multi-Linux Manager 服务器以使用单点登录。
|
确保您打算使用 SSO 进行身份验证的用户已存在于 SUSE Multi-Linux Manager 中。您可以手动在 SUSE Multi-Linux Manager Web UI 中创建用户,或者使用命令行界面或 API(使用启用 PAM 或无密码身份验证)。 |
在 SUSE Multi-Linux Manager 服务器上,打开
/etc/rhn/rhn.conf配置文件。添加以下参数。将
<FQDN_MLM>替换为您 SUSE Multi-Linux Manager 安装的完全限定的域名,将<FQDN_IDP>替换为您 Keycloak 服务器的 FQDN,将<REALM>替换为您的领域名称(例如MLM),并将<CERTIFICATE>替换为在先前步骤中从 Keycloak 获取的 Base64 编码的 SAML 公共证书字符串:java.sso = true java.sso.onelogin.saml2.debug = true java.sso.onelogin.saml2.sp.entityid = https://<FQDN_MLM>/rhn/manager/sso/metadata java.sso.onelogin.saml2.sp.assertion_consumer_service.url = https://<FQDN_MLM>/rhn/manager/sso/acs java.sso.onelogin.saml2.sp.single_logout_service.url = https://<FQDN_MLM>/rhn/manager/sso/sls java.sso.onelogin.saml2.idp.entityid = http://<FQDN_IDP>:8080/realms/<REALM> java.sso.onelogin.saml2.idp.single_sign_on_service.url = http://<FQDN_IDP>:8080/realms/<REALM>/protocol/saml java.sso.onelogin.saml2.idp.single_logout_service.url = http://<FQDN_IDP>:8080/realms/<REALM>/protocol/saml java.sso.onelogin.saml2.idp.x509cert = -----BEGIN CERTIFICATE----- <CERTIFICATE> -----END CERTIFICATE----- # Organization Metadata (Optional) java.sso.onelogin.saml2.organization.name = SUSE Multi-Linux Manager java.sso.onelogin.saml2.organization.displayname = SUSE Multi-Linux Manager java.sso.onelogin.saml2.organization.url = https://<FQDN_MLM> java.sso.onelogin.saml2.organization.lang = # Contacts (Optional) java.sso.onelogin.saml2.contacts.technical.given_name = SUSE Multi-Linux Manager Admin java.sso.onelogin.saml2.contacts.technical.email_address = admin@example.com java.sso.onelogin.saml2.contacts.support.given_name = SUSE Multi-Linux Manager Admin java.sso.onelogin.saml2.contacts.support.email_address = admin@example.com保存更改并重启 spacewalk 服务以应用更改:
mgradm restart导航至 SUSE Multi-Linux Manager Web UI。您应该会被重定向到 Keycloak 登录屏幕,并在身份验证后成功登录回 SUSE Multi-Linux Manager。
3. 查错
如果在使用单点登录进行身份验证时遇到问题,请使用以下步骤进行诊断:
-
验证日志:在
/var/log/rhn/rhn_web_ui.log中查找 SSO 错误。当/etc/rhn/rhn.conf中设置了java.sso.onelogin.saml2.debug = true时,将启用详细日志记录。 -
未找到用户:如果您在 Keycloak 身份验证后看到“未找到用户”或重定向失败,请确保 Keycloak 中的用户名与 SUSE Multi-Linux Manager 中的用户名完全匹配。用户必须预先在 SUSE Multi-Linux Manager 中创建。
-
签名和证书错误:如果您看到“签名验证失败”,请验证
java.sso.onelogin.saml2.idp.x509cert中的证书是否与 Keycloak 领域设置中Keys选项卡下显示的活动 RSA 证书一致,并确保客户端设置中的Sign assertions已切换为On。 -
无效的重定向 URI:如果 Keycloak 在重定向时显示“无效参数:redirect_uri”,请验证 Keycloak 客户端设置中的
Valid redirect URIs是否设置为https://<FQDN_MLM>/rhn/manager/sso/acs。