示例 SSO 实现

此示例通过使用 SUSE Manager 公开三个端点并使用 Keycloak 21.0.1 或更高版本作为身份服务提供者 (IdP) 来实现 SSO。

首先安装 Keycloak IdP,然后设置 SUSE Manager 服务器。之后可以将端点添加为 Keycloak 客户端并创建用户。

此示例仅用于说明目的。SUSE 不建议也不支持第三方身份服务提供者,并且与 Keycloak 不存在从属关系。有关 Keycloak 支持信息,请参见 https://www.keycloak.org/

可以直接在您的计算机上安装 Keycloak,或者在容器中运行 Keycloak。此示例在 Podman 容器中运行 Keycloak。有关安装 Keycloak 的详细信息,请参见 https://www.keycloak.org/guides#getting-started 上的 Keycloak 文档。

过程:设置身份服务提供者
  1. 根据 Keycloak 文档所述在 Podman 容器中安装 Keycloak。

  2. 使用 -td 参数运行容器,以确保进程保持运行:

    podman run -td --name keycloak -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:21.0.1
  3. admin 用户身份登录到 Keycloak Web UI,然后使用以下细节创建身份验证领域:

    • 名称字段中输入领域的名称。 例如 SUMA

    • 端点字段中,单击 SAML 2.0 身份提供者元数据链接。 如此您将转到一个页面,其中会显示要复制到 SUSE Manager 配置文件中的端点和证书。

安装 Keycloak 并创建领域后,便可以准备 SUSE Manager 服务器。

过程:设置 SUSE Manager Server
  1. 在 SUSE Manager Server 上打开 /etc/rhn/rhn.conf 配置文件,然后编辑这些参数。 将 <FQDN_SUMA> 替换为您的 SUSE Manager 安装的完全限定域名:

    java.sso.onelogin.saml2.sp.entityid                       = https://<FQDN_SUMA>/rhn/manager/sso/metadata
    java.sso.onelogin.saml2.sp.assertion_consumer_service.url = https://<FQDN_SUMA>/rhn/manager/sso/acs
    java.sso.onelogin.saml2.sp.single_logout_service.url      = https://<FQDN_SUMA>/rhn/manager/sso/sls
  2. 在配置文件中,将 <FQDN_IDP> 替换为您的 Keycloak 服务器的完全限定域名。 将 <REALM> 替换为您的身份验证领域,例如 SUMA

    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
  3. 在 IdP 元数据中,找到公共 x509 证书。 证书使用如下格式:http://<FQDN_IDP>:8080/realms/<REALM>/protocol/saml/descriptor。在配置文件中指定 IdP 的公共 x509 证书:

    java.sso.onelogin.saml2.idp.x509cert = -----BEGIN CERTIFICATE----- <CERTIFICATE>  -----END CERTIFICATE-----

下面是启用 SSO 后 SUSE Manager 上的 rhn.conf 的示例:

java.sso = true


# This is the configuration file for Single Sign-On (SSO) via SAMLv2 protocol
# To enable SSO, set java.sso = true in /etc/rhn/rhn.conf
#
# Mandatory changes: search this file for:
# - YOUR-PRODUCT
# - YOUR-IDP-ENTITY
#
# See product documentation and the comments inline in this file for more
# information about every parameter.
#
#
#
#
# If 'strict' is True, then the Java Toolkit will reject unsigned
# or unencrypted messages if it expects them signed or encrypted
# Also will reject the messages if not strictly follow the SAML
#
# WARNING: In production, this parameter setting parameter MUST be set as "true".
# Otherwise your environment is not secure and will be exposed to attacks.
# Enable debug mode (to print errors)
# Identifier of the SP entity (must be a URI)
java.sso.onelogin.saml2.sp.entityid = https://sumaserver.example.org/rhn/manager/sso/metadata

# Specifies info about where and how the <AuthnResponse> message MUST be
# returned to the requester, in this case our SP.
# URL Location where the <Response> from the IdP will be returned
java.sso.onelogin.saml2.sp.assertion_consumer_service.url = https://sumaserver.example.org/rhn/manager/sso/acs

# Specifies info about where and how the <Logout Response> message MUST be
# returned to the requester, in this case our SP.
java.sso.onelogin.saml2.sp.single_logout_service.url = https://sumaserver.example.org/rhn/manager/sso/sls

# Identifier of the IdP entity (must be a URI)
java.sso.onelogin.saml2.idp.entityid = http://idp.example.org:8080/realms/SUMA

# SSO endpoint info of the IdP. (Authentication Request protocol)
# URL Target of the IdP where the SP will send the Authentication Request Message
java.sso.onelogin.saml2.idp.single_sign_on_service.url = http://idp.example.org:8080/realms/SUMA/protocol/saml

# SLO endpoint info of the IdP.
# URL Location of the IdP where the SP will send the SLO Request
java.sso.onelogin.saml2.idp.single_logout_service.url = http://idp.example.org:8080/realms/SUMA/protocol/saml

# Public x509 certificate of the IdP
java.sso.onelogin.saml2.idp.x509cert = -----BEGIN CERTIFICATE----- MIIClzCCAX8CBgGC+tPbVjANBgkqhkiG9w0BAQsFADAPMQ0wCwYDVQQDDARTVU1BMB4XDTIyMDkwMTIwNTEwNFoXDTMyMDkwMTIwNTI0NFowDzENMAsG
A1UEAwwEU1VNQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMNSWJAalB5mShTkMBO5mrsOosyheEL8/A37WvuqDPwwEfm4x0cG7gmMHvONxYXZk+LRyzoQl2sBrNFrbMuwu5dnah5ZSMxQyUu697S280m4vIiegGaFdbgH+g4FGBu
eSis1ssMzTcES+NUuI7pLkMLNmSQtncESnoL9q2SyeQSwYtr5dz1ydl6IzjwtaWeyQ9EGJNtJtLk3U4+arLPCpHAwqFAnLO9NeYcRDNUKhNBs1v5mHP+L066PZu1/DkE0mSgy/+qXaS0CgZVKqz8qB+bvHVuAq9W60g1CjqZKbwvPu72p/7+d8z
9DxXPIZ1uxdqn19q/kLEP2TYLtgQobSHECAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAga+raLMJDo/P/yN1Z6SGGocK227WFqovBiE/mLYlp5Ff0+0jS1US1plSppJ94xOr8j0m7HW0Wu5xCz6oOhzXTEtnfIbeRyr1Rms3BWdxyXgQ9bWUeZMWZ
HfDkTbhgRRmjDEwSSfEXRKQNvw41CpnlB36I0++ejgGnjDvH7BbkCaoW55JF5j6DT/WYR0n7MkEl2Ova9CH0e9X7Gny8iOAg26oziy06uy3P/lx9Z9RmHnvpvN/Q34SGEq9z/HlQVuP12UPj//iT21Jc17OOZFsZQXlGFTG6bXKmO42W8FdUDJU
ONoXZgjMb3eC7U691YyeowoqTY7mJKxNPprYY/lL0w== -----END CERTIFICATE-----

# Organization
java.sso.onelogin.saml2.organization.name = SUSE Manager admin
java.sso.onelogin.saml2.organization.displayname = SUSE Manager admin
java.sso.onelogin.saml2.organization.url = https://sumaserver.example.org
java.sso.onelogin.saml2.organization.lang =

# Contacts
java.sso.onelogin.saml2.contacts.technical.given_name = SUSE Manager admin
java.sso.onelogin.saml2.contacts.technical.email_address = suma@example.org
java.sso.onelogin.saml2.contacts.support.given_name = SUSE Manager admin
java.sso.onelogin.saml2.contacts.support.email_address = suma@example.org

您可以将 SUSE Manager 端点添加到 Keycloak 中。Keycloak 将端点称为客户端。

过程:将端点添加为客户端
  1. 在 Keycloak Web UI 中,使用以下细节创建新客户端:

    • 客户端类型字段中选择 SAML

    • 客户端 ID 字段中,输入服务器配置文件中以 java.sso.onelogin.saml2.idp.entityid 形式指定的端点。 例如 https://<FQDN_SUMA>/rhn/manager/sso/metadata

  2. 设置选项卡中,使用以下细节对客户端进行精细调整:

    • 对声明签名开关切换为

    • 签名算法字段中选择 RSA_SHA1

    • SAML 签名密钥名称字段中,选择密钥 ID

  3. 密钥选项卡中:

    • 需要客户端签名切换为

  4. 高级选项卡上的精细 SAML 端点配置部分,使用以下细节添加两个端点:

    • 声明使用者服务字段中,输入服务器配置文件中以 java.sso.onelogin.saml2.sp.assertion_consumer_service.url 形式指定的端点。 例如 https://<FQDN_SUMA>/rhn/manager/sso/acs

    • 注销服务字段中,输入服务器配置文件中以 java.sso.onelogin.saml2.sp.single_logout_service.url 形式指定的端点。 例如 https://<FQDN_SUMA>/rhn/manager/sso/sls

将端点添加为客户端后,可以配置客户端范围,并在 Keycloak 和 SUSE Manager 之间映射用户。

过程:配置客户端范围和映射程序
  1. 在 Keycloak Web UI 中,导航到客户端  客户端范围选项卡,然后将 role_list 指定为默认客户端范围。

  2. 导航到客户端范围  映射程序选项卡,然后使用默认值添加用户属性 UID 的映射程序。 SUSE Manager 需要此 SAML 属性。

  3. 导航到客户端范围  映射程序,然后单击 role_list 映射程序。将单角色属性设置为

  4. 导航到用户  管理员部分并创建一个管理用户。 此用户不需要与 SUSE Manager 管理用户匹配。

  5. 导航到用户  角色映射选项卡,使用与 SUSE Manager 管理用户的用户名匹配的值添加名为 UID 的属性。

  6. 导航到用户  身份凭证选项卡,设置 SUSE Manager 管理用户所用的同一口令。

  7. 保存更改。

完成配置后,可以测试安装是否按预期工作。重启动 SUSE Manager 服务器以应用您的更改,然后导航到 SUSE Manager Web UI。如果您的安装正常工作,则您会重定向到 Keycloak SSO 页面,可在其中成功完成身份验证。