SSOの実装例
この例では、3つのエンドポイントをSUSE Managerで公開し、Keycloak 21.0.1以降をIDサービスプロバイダ(IdP)として使用することによってSSOが実装されています。
まずKeycloak IdPをインストールしてから、SUSE Managerサーバを設定します。 次に、エンドポイントをKeycloakクライアントとして追加し、ユーザを作成できます。
この例は、説明のみを目的としています。 SUSEは、サードパーティのIDサービスプロバイダを推奨またはサポートしておらず、Keycloakとは提携していません。 Keycloakのサポートについては、https://www.keycloak.org/を参照してください。 |
Keycloakは、マシンに直接インストールすることも、コンテナ内で実行することもできます。 この例では、PodmanコンテナでKeycloakを実行します。 Keycloakのインストールの詳細については、https://www.keycloak.org/guides#getting-startedにあるKeycloakのドキュメントを参照してください。
-
Keycloakのドキュメントに従って、PodmanコンテナにKeycloakをインストールします。
-
-td
引数を使用してコンテナを実行し、プロセスが実行されたままになっていることを確認します。podman run -td --name keycloak -p 8080:8080 -e KEYCLOAK_USER=admin -e KEYCLOAK_PASSWORD=admin quay.io/keycloak/keycloak:21.0.1
-
Keycloak Web UIに
admin
ユーザとしてサインインし、次の詳細情報を使用して認証レルムを作成します。-
[
名前
]フィールドに、レルムの名前を入力します。 たとえば、SUMA
。 -
[
エンドポイント
]フィールドで、[SAML 2.0 Identity Provider Metadata
]リンクをクリックします。 これにより、SUSE Manager設定ファイルにコピーするエンドポイントと証明書が表示されるページに移動します。
-
Keycloakをインストールしてレルムを作成したら、SUSE Managerサーバを準備できます。
-
SUSE Managerサーバで、
/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
-
設定ファイルで、
<FQDN>
を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
-
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はエンドポイントをクライアントと呼びます。
-
Keycloak Web UIで、これらの詳細を使用して新しいクライアントを作成します。
-
[
Client type
](クライアントタイプ)フィールドで、[SAML
]を選択します。 -
[
クライアントID
]フィールドに、サーバ設定ファイルで指定されているエンドポイントをjava.sso.onelogin.saml2.idp.entityid
として入力します。 たとえば、https://<FQDN_SUMA>/rhn/manager/sso/metadata
。
-
-
[設定]タブで、これらの詳細を使用してクライアントを微調整します。
-
[
Sign assertions
](アサーションに署名する)を[オン
]に切り替えます。 -
[
Signature algorithm
](署名アルゴリズム)フィールドで、[RSA_SHA1
]を選択します。 -
[
SAML Signature Key Name
](SAML署名キー名)フィールドで、[Key ID
](キーID)を選択します。
-
-
[
キー
]タブで次の操作を行います。-
[
Client signature required
](クライアントの署名が必要)を[オフ
]に設定します。
-
-
[
Advanced
](詳細)タブの[Fine Grain SAML Endpoint Configuration
]セクションで、これらの詳細を使用して2つのエンドポイントを追加します。-
[
Assertion Consumer Service
](アサーションコンシューマサービス)フィールドの両方にサーバ設定ファイルで指定されているエンドポイントをjava.sso.onelogin.saml2.sp.assertion_consumer_service.url
として入力します。 たとえば、https://<FQDN_SUMA>/rhn/manager/sso/acs
。 -
[
Logout Service
](ログアウトサービス)フィールドの両方に、サーバ設定ファイルで指定されているエンドポイントをjava.sso.onelogin.saml2.sp.single_logout_service.url
として入力します。 たとえば、https://<FQDN_SUMA>/rhn/manager/sso/sls
。
-
エンドポイントをクライアントとして追加したら、クライアントスコープを設定し、KeycloakとSUSE Managerの間でユーザをマッピングできます。
-
Keycloak Web UIで、
(クライアントスコープ)タブに移動し、デフォルトのクライアントスコープとしてrole_list
を割り当てます。 -
(マッパー)タブに移動して、ユーザ属性uid
のマッパーをデフォルトの値を使用して追加します。 このSAML属性はSUSE Managerによって想定されています。 -
(マッパー)に移動し、[role_list
] マッパーをクリックします。[Single Role Attribute
](単一役割属性)を[オン
]に設定します。 -
セクションに移動し、管理ユーザを作成します。 このユーザは、SUSE Manager管理ユーザに一致する必要はありません。
-
(ロールマッピング)タブに移動して、SUSE Manager管理ユーザのユーザ名に一致する値を持つuid
属性を追加します。 -
タブに移動して、SUSE Manager管理ユーザによって使用されるのと同じパスワードを設定します。 . 変更を保存します。
設定が完了したら、インストールが期待どおりに動作していることをテストできます。 SUSE Managerサーバを再起動して変更を取得し、SUSE Manager Web UIに移動します。 インストールが正常に動作している場合は、Keycloak SSOページにリダイレクトされ、ここでは正常に認証できます。