Integrasi SSO Keycloak
Gambaran keseluruhan
Panduan ini menyediakan arahan langkah demi langkah untuk mengintegrasikan Keycloak Single Sign-On (SSO) dengan platform Glasswall Halo dalam persekitaran luar talian (air-gapped), on-premises.
Ia mengandaikan anda telah pun menggunakan platform Single Node Halo (contohnya, pada VM melalui Proxmox atau ESXi) dan kini ingin mendayakan SSO berasaskan OIDC menggunakan Keycloak.
Anda akan mempelajari cara untuk:
- Menyediakan pelayan Keycloak dengan HTTPS dalam persekitaran luar talian (menggunakan imej kontena pramuat atau pemasangan VM manual).
- Import dan sesuaikan konfigurasi Keycloak
glasswall-realm.jsonyang disediakan. - Konfigurasikan sijil TLS dan resolusi DNS/hos untuk kedua-dua Keycloak dan Halo.
- Deploy the Halo portal and related services:
cdrplatform-portalcdrplatform-portalaccesscdrplatform-api-access
Panduan Integrasi SSO Keycloak Glasswall Halo
- Prasyarat
- Langkah 1 - Mengkonfigurasi keycloak untuk SSO Glasswall Halo
- Langkah 2 - Sijil TLS dan pertimbangan DNS
- Langkah 3 - Mengerahkan perkhidmatan Halo dengan SSO Keycloak (konfigurasi Helm)
- Langkah 4 - Pengesahan dan pengujian integrasi SSO
- Langkah 5 - Penyelesaian masalah
Prasyarat
Keperluan persekitaran
- Persediaan ini ditujukan untuk persekitaran air-gapped atau on-premises yang dikawal ketat.
- Kluster Halo Nod Tunggal mesti telah pun dikerahkan.
- Resolusi DNS dalaman mesti tersedia, sama ada melalui pelayan DNS tempatan atau secara manual melalui entri
/etc/hosts. - Keycloak mesti dipasang secara setempat pada hos atau mesin maya. → dokumentasi & pemasangan Keycloak
Sumber yang diperlukan
- Fail realm yang telah diprakonfigurasi (
glasswall-realm.json), disediakan oleh Glasswall Support. - Akses setempat kepada carta Helm Halo untuk deployment dalam kluster Single Node Halo.
Konfigurasi DNS/hosts
Pastikan nama hos untuk pelayan Keycloak anda boleh diselesaikan oleh kedua-dua mesin klien dan komponen platform Halo.
- Dengan DNS dalaman: cipta rekod A untuk
keycloak.dev.localyang menunjuk kepada alamat IP pelayan Keycloak. - Tanpa DNS dalaman: tambah entri berikut ke fail
hostspada setiap mesin yang memerlukan akses:
Langkah 1 - Mengkonfigurasi Keycloak untuk Glasswall Halo SSO
Glasswall menyediakan konfigurasi realm Keycloak (sebagai fail JSON) yang mentakrifkan realm, klien, peranan dan skop yang diperlukan untuk SSO Halo.
Anda boleh mengimport konfigurasi ini untuk mengelakkan persediaan manual. Dalam persediaan luar talian, lakukan ini melalui Keycloak Admin UI.
1.1 - Mengimport konfigurasi realm Glasswall
A. Dapatkan eksport realm: anda sepatutnya mempunyai fail bernama glasswall-realm.json. Fail ini mengandungi tetapan realm untuk SSO Halo.
Ringkasan realm Glasswall
Realm Glasswall merangkumi item pra-konfigurasi berikut:
-
ID Realm: Glasswall
-
Klien
- Halo-portal-client
- Halo-API-access
- Halo-portal-access
-
Peranan utama
- Peringkat realm: admin, user
- Peringkat klien: peranan admin dan user klien Halo.
- Skop klien (diprakonfigurasikan dengan mapper):
- Portaluserscope: tuntutan yang diperlukan (roles, email) kepada token.
-
Jangka hayat token
- Masa tamat melahu sesi SSO: 30 minit
-
Pengesahan: nama pengguna/kata laluan standard.
B. Log masuk ke Keycloak Admin
- Menggunakan pelayar web, navigasi ke Keycloak Admin Console di
https://<KEYCLOAK_HOST>:8443/dan log masuk dengan akaun admin master.

C. Import realm.
- Dalam konsol admin pilih menu lungsur yang kini memaparkan "Master" dan klik Create realm.

- Daripada skrin Create realm, pilih Import, dan muat naik fail
glasswall-realm.json.

- Keycloak will parse the file and populate the realm name (e.g.,
glasswall).- Sahkan import.

D. Sahkan tetapan realm
- After import, review key settings and ensure:
- Nama realm ialah
glasswall. - Realm didayakan.
- SSL diperlukan: kemungkinan ditetapkan kepada
external. - Clients should include:
halo-portal-clienthalo-portal-accesshalo-api-access
- Nama realm ialah

1.2 Menyesuaikan tetapan klien (nama hos dan URI ubah hala)
Seterusnya, untuk setiap klien Halo, kemas kini konfigurasi agar sepadan dengan persekitaran anda.
Halo-portal-client (frontend portal)

Valid redirect URIs: gantikan domain pemegang tempat dalam JSON realm dengan domain portal sebenar anda. Konfigurasi sampel menggunakan domain ujian (contohnya, https://pvetest.cdr.glasswall.dev/authentication/login-callback). Kemas kini nilai ini agar sepadan dengan URL yang akan digunakan pengguna untuk mengakses portal Halo anda.
Sebagai contoh, jika portal Halo anda tersedia di https://halo.dev.local/ dan laluan callback log masuk aplikasi ialah /authentication/login-callback, tetapkan:
- Valid redirect URIs:
https://halo.dev.local/authentication/* - Web origins:
https://halo.dev.local - URL Root (pilihan):
https://halo.dev.local - URI ubah hala sah selepas log keluar:
https://halo.dev.local/authentication/logout-callback

Halo-portal-access (bahagian belakang portal)
- Valid redirect URIs: (e.g.,
https://pvetest.cdr.glasswall.dev/*)- Kemas kini kepada domain portal anda.
- Web origins:
https://halo.dev.local
Halo-API-access
- Biarkan tetapan ubah hala seperti sedia ada, dan simpan tetapan setiap klien.

1.3 Mencipta pengguna dan menetapkan peranan
Sekarang anda akan mencipta pengguna dan menetapkan peranan Halo.

A. Dalam realm glasswall, pergi ke Users → Add user.
B. Isikan Username dan butiran.
C. Dalam bahagian Credentials, tetapkan kata laluan dan nyahpilih "Temporary".
D. Dalam Role mappings, tetapkan:
- Realm roles:
AdminUser
- Client roles:
halo-portal-client[Admin, user]halo-api-access[Admin, user]halo-portal-access[Admin, user]

Pengguna Admin melihat:

Dan boleh menguruskan:

Termasuk:

Langkah 2 - Sijil TLS dan pertimbangan DNS
Pastikan kepercayaan TLS dan DNS yang betul untuk semua komponen.
2.1 Kepercayaan TLS
Perkhidmatan platform Halo (Portal, Portal-Access, API-Access) mesti mempercayai sijil Keycloak.
2.2 DNS dan /etc/hosts
Pastikan:
- Nama hos Keycloak dapat diselesaikan untuk semua perkhidmatan dan pengguna
- Domain Halo juga dapat diselesaikan
Langkah 3 - Mengerahkan perkhidmatan Halo dengan SSO Keycloak (konfigurasi Helm)
Halo dikerahkan melalui Helm; persekitaran luar talian menggunakan carta yang dibundel bersama sistem.
Kerahkan portal Halo
portal_image_tag=$(k get deploy portal -o json | jq -r '.spec.template.spec.containers[0].image' | cut -d":" -f2)
portal_domain="glasswall.example.com"
keycloak_domain="keycloak.example.com"
helm upgrade --install cdrplatform-portal ./cdrplatform-portal \
--set image.tag="${portal_image_tag:?}" \
--set image.pullPolicy=IfNotPresent \
--set ingress.tls.enabled=true \
--set ingress.tls.domain="${portal_domain:?}" \
--set ingress.tls.secretName="tls-secret" \
--set configuration.BackendUrl="https://${portal_domain:?}" \
--set configuration.HaloVersion="2.12.0" \
--set configuration.EnabledPages="SystemSettings\,PolicySettings\,ValidationSettings" \
--set configuration.OIDC.ProviderOptions.Authority="https://${keycloak_domain:?}/realms/glasswall" \
--set configuration.OIDC.ProviderOptions.ClientId="halo-portal-client" \
--set configuration.OIDC.ProviderOptions.RedirectUri="https://${portal_domain:?}/authentication/login-callback" \
--set configuration.OIDC.ProviderOptions.PostLogoutRedirectUri="https://${portal_domain:?}/authentication/logout-callback" \
--set configuration.OIDC.ProviderOptions.Scope="openid profile api://cdrplatform-portal-access/PortalUserScope" \
--set configuration.OIDC.ProviderOptions.SilentCheckSsoRedirectUri="https://${portal_domain:?}/silent-check-sso.html" \
--set appenvironment.HTTP_CSP_FRAME_SRC="'self' https://${keycloak_domain:?} https://${portal_domain:?}/silent-check-sso.html" \
--set appenvironment.HTTP_CSP_CONNECT_SRC="'self' https://${keycloak_domain:?}" \
--set configuration.Authentication__Schemes__Bearer__RequireHttpsMetadata=true \
--set configuration.Authentication__Schemes__Bearer__MetadataAddress="https://${keycloak_domain:?}/realms/glasswall/.well-known/openid-configuration" \
--set configuration.Logging__LogLevel__Keycloak="Debug" \
--atomic
Kerahkan portal-access
image_tag=$(k get deploy portal-access -o json | jq -r '.spec.template.spec.containers[0].image' | cut -d":" -f2)
portal_domain="glasswall.example.com"
keycloak_domain="keycloak.example.com"
helm upgrade --install cdrplatform-portal-access ./cdrplatform-portal-access \
--set image.tag="${image_tag:?}" \
--set image.pullPolicy=IfNotPresent \
--set ingress.tls.domain="${portal_domain:?}" \
--set ingress.tls.enabled=true \
--set ingress.tls.secretName="tls-secret" \
--set configuration.AuthenticationScheme="Bearer" \
--set configuration.Authentication__Schemes__Bearer__ValidAudiences__0="api://cdrplatform-portal-access" \
--set configuration.Authentication__Schemes__Bearer__ValidIssuer="https://${keycloak_domain:?}/realms/glasswall" \
--set configuration.Authentication__Schemes__Bearer__Authority="https://${keycloak_domain:?}/realms/glasswall" \
--set configuration.Authentication__Schemes__Bearer__RequireHttpsMetadata=true \
--set configuration.Authentication__Schemes__Bearer__MetadataAddress="https://${keycloak_domain:?}/realms/glasswall/.well-known/openid-configuration" \
--set configuration.Authentication__Schemes__Bearer__JwksUri="https://${keycloak_domain:?}/realms/glasswall/protocol/openid-connect/certs" \
--atomic
Kerahkan API-access
api_access_image_tag=$(k get deploy api-access -o json | jq -r '.spec.template.spec.containers[0].image' | cut -d":" -f2)
portal_domain="test.cdr.glasswall.dev"
keycloak_domain="pbkc.cdr.glasswall.dev"
helm upgrade --install cdrplatform-api-access ./cdrplatform-api-access \
--set image.tag="${api_access_image_tag:?}" \
--set image.pullPolicy=IfNotPresent \
--set ingress.tls.enabled=true \
--set ingress.tls.secretName="tls-secret" \
--set ingress.tls.domain="${portal_domain:?}" \
--set configuration.AuthenticationScheme="Bearer" \
--set configuration.Authentication__Schemes__Bearer__ValidAudiences__0="api://cdrplatform-api-access" \
--set configuration.Authentication__Schemes__Bearer__ValidIssuer="https://${keycloak_domain:?}/realms/glasswall" \
--set configuration.Authentication__Schemes__Bearer__Authority="https://${keycloak_domain:?}/realms/glasswall" \
--set configuration.Authentication__Schemes__Bearer__RequireHttpsMetadata=true \
--set configuration.Authentication__Schemes__Bearer__MetadataAddress="https://${keycloak_domain:?}/realms/glasswall/.well-known/openid-configuration" \
--set configuration.Authentication__Schemes__Bearer__JwksUri="https://${keycloak_domain:?}/realms/glasswall/protocol/openid-connect/certs" \
--atomic
3.1 Senarai semak selepas deployment
- Pastikan pod sedang berjalan (tiada
CrashLoopBackOff). - Semak juga bahawa log menunjukkan konfigurasi Keycloak OIDC yang berjaya.

Langkah 4 - Pengesahan dan ujian integrasi SSO

4.1 Ujian log masuk pelayar
A. Lancarkan portal Halo. B. Dialihkan ke log masuk Keycloak.

C. Log masuk ke akaun anda.

D. Kembali ke Halo selepas berjaya diautentikasi.

Langkah 5 - Penyelesaian masalah
URI redirect yang tersalah konfigurasi
Semak bahawa URI sepadan antara portal dan Keycloak.
Penyimpangan masa
Segerakkan jam sistem.
Ralat kepercayaan TLS
Pastikan Halo mempercayai sijil Keycloak.