Mengonfigurasi Keycloak sebagai SAML Identity Provider: membuat SAML client, mengekspor metadata, mengatur kunci signing dan enkripsi, memilih format NameID, memetakan atribut, serta menyiapkan endpoint ACS dan SLS untuk integrasi dengan aplikasi.

Di episode 12 kalian memahami fondasi SAML: assertion, binding, alur SP-initiated dan IdP-initiated, serta struktur XML. Episode 13 ini menerjemahkan teori itu menjadi konfigurasi nyata: menyalakan Keycloak sebagai SAML Identity Provider. Kalian akan membuat SAML client, mengekspor metadata, mengatur kunci signing dan enkripsi, memilih format NameID, memetakan atribut, lalu menguji alurnya — sebelum di episode 14 kita menyambungkan aplikasi sungguhan sebagai service provider.
Ketika kalian membuat sebuah client dengan jenis SAML di sebuah realm, Keycloak langsung berperan sebagai IdP untuk aplikasi itu. Ini bukan mode khusus; realm yang sama bisa melayani klien OIDC dan SAML sekaligus. Yang membedakan hanyalah bagaimana aplikasi memintanya — lewat protocol SAML yang berbasis XML, bukan lewat token endpoint OIDC.
Dari sudut pandang SP, Keycloak mengekspos tiga hal penting:
/realms/{realm}/protocol/saml.Langkah pertama di admin console:
1. Buka tab Clients pada sebuah realm, klik Create client
2. Pilih Client type SAML, isi Client ID dengan entity ID milik SP
3. Di tab Settings, isi Valid Redirect URIs dengan URL ACS aplikasi
4. Pilih Name ID Format yang disepakati dengan SP
5. Atur opsi signing dan enkripsi sesuai kebutuhan SP
6. Simpan konfigurasiDi Keycloak modern, jenis client dipilih lewat dropdown Client type dengan nilai saml. Opsi-opsi yang kalian temukan di tab Settings: Sign Assertions, Sign Documents, Require Assertion Signature, Encrypt Assertions, Force POST Binding, dan Assertion Signature Algorithm. Jangan nyalakan semua tanpa paham — setiap opsi harus cocok dengan kemampuan SP.
Aturan praktis: nyalakan Sign Assertions selalu; aktifkan Encrypt Assertions hanya bila SP menuntutnya, karena enkripsi menambah kompleksitas pertukaran kunci.
Setelah client dibuat, Keycloak menyediakan metadata lengkap realm di endpoint:
realms/demo/protocol/saml/descriptor
Dokumen inilah yang kalian berikan ke SP sebagai gambaran lengkap kemampuan IdP — termasuk kunci publik yang dipakai untuk memverifikasi signature. Potongannya kira-kira seperti ini:
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
entityID="https://keycloak.example.com/realms/demo">
<md:IDPSSODescriptor WantAuthnRequestsSigned="false"
protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
<md:KeyDescriptor use="signing">
<ds:KeyInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:X509Certificate>MIIC...</ds:X509Certificate>
</ds:KeyInfo>
</md:KeyDescriptor>
<md:SingleSignOnService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
Location="https://keycloak.example.com/realms/demo/protocol/saml"/>
<md:SingleLogoutService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect"
Location="https://keycloak.example.com/realms/demo/protocol/saml"/>
</md:IDPSSODescriptor>
</md:EntityDescriptor>Keycloak memakai kunci realm untuk menandatangani assertion dan bisa mengekspornya lewat tab Realm Keys di admin console. Ingat: setiap kali kalian memutar (rotate) kunci signing, metadata yang sudah dipegang SP harus diperbarui — jika tidak, semua SP akan gagal memverifikasi signature.
Di tab Settings client SAML, kalian mengatur titik-titik penting yang menentukan bagaimana SP akan berbicara ke IdP:
Untuk enkripsi, Keycloak mendukung enkripsi assertion dengan standar XML Encryption. Kunci publik SP diambil dari metadata, lalu assertion dienkripsi sebelum dikirim. Kalian akan membutuhkan ini ketika SP menuntut assertion terenkripsi.
| Opsi Integrasi | Cara kerja | Cocok untuk | Kekurangan |
|---|---|---|---|
| Import metadata SP | Admin mengunggah XML metadata milik SP ke Keycloak | SP modern yang menyediakan metadata | Bergantung kualitas metadata yang disediakan |
| Konfigurasi manual | Isi entity ID, ACS URL, dan atribut secara manual | SP tanpa dukungan metadata | Rawan typo, butuh ketelitian tinggi |
NameID adalah identitas user yang dibawa assertion. Pilihan formatnya diatur lewat field Name ID Format pada client:
email — cocok bila email adalah identitas utama di SP.persistent — identifier tidak berubah sepanjang hidup user, cocok untuk federation lintas organisasi.transient — identifier sekali pakai, untuk sesi yang tidak perlu dikaitkan antar kunjungan.username — nama user di realm Keycloak.Force Name ID Format memaksa assertion selalu memakai format yang dipilih, mengabaikan yang diminta SP di AuthnRequest.
Atribut di assertion diatur lewat tab Mappers pada client. Setiap mapper memetakan satu atribut user Keycloak ke sebuah nama atribut SAML yang dibawa assertion:
Important
Metadata adalah kontrak antara IdP dan SP. Ubah kunci signing atau tambah atribut, maka perbarui metadata yang dipegang SP. Sebagian besar kegagalan integrasi SAML bersumber dari metadata yang basi.
Setelah client dikonfigurasi, uji dengan menelusuri aplikasi SP dan menekan login. Beberapa titik yang selalu diperiksa saat alur gagal:
Event realm di Keycloak bisa dipakai untuk melihat alur: admin console mencatat login dan kegagalan yang berhubungan dengan client SAML ini.
Pada episode 13 ini, kalian menyalakan Keycloak sebagai SAML IdP: membuat SAML client, memahami endpoint SSO dan SLS, mengekspor metadata lengkap dengan kunci signing, mengatur enkripsi dan algoritma signature, memilih format NameID, memetakan atribut lewat mapper, serta mengetahui titik-titik troubleshooting utama.
Inti yang harus dibawa pulang:
saml menjadikan Keycloak IdP tanpa mengubah realm yang sama untuk OIDC.realms/demo/protocol/saml/descriptor berisi semua yang dibutuhkan SP.Di episode 14 berikutnya, kita membalik sisi: Keycloak sudah siap sebagai IdP, sekarang kalian menyambungkan SAML service provider sungguhan — Salesforce, Google Workspace, atau aplikasi Jira — termasuk cara menguji assertion dengan SAML Tracer dan menangani error khas integrasi.