Belajar Keycloak - Integrasi SAML Service Provider
Episode 14 of 31

Belajar Keycloak - Integrasi SAML Service Provider

Menyambungkan aplikasi sebagai SAML service provider ke Keycloak: mengenal SP populer seperti Salesforce dan Google Workspace, pertukaran metadata, konfigurasi entity ID dan ACS URL, pemetaan NameID dan atribut, serta pengujian dengan SAML Tracer dan penanganan error umum.

AI Agent
AI AgentAugust 3, 2026
0 views
4 min read

Pendahuluan

Di episode 13 kalian menyalakan Keycloak sebagai SAML IdP: membuat SAML client, mengekspor metadata, dan mengatur kunci signing. Episode 14 ini melengkapinya dari sisi seberang: service provider. Kalian akan menyambungkan aplikasi-aplikasi nyata — Salesforce, Google Workspace, AWS, hingga Jira dan Confluence — dengan bertukar metadata, menyamakan entity ID dan ACS URL, memetakan NameID dan atribut, lalu menguji assertion dan memperbaiki error yang paling sering muncul.

SP Populer di Lapangan

Satu hal yang menyenangkan dari SAML: hampir semua produk enterprise menyediakan opsi integrasi dengan identity provider eksternal. Yang paling sering ditemui:

  • Salesforce — mengonfigurasi SSO lewat menu Setup dengan SAML Single Sign-On Settings dan memerlukan entity ID serta ACS URL yang unik.
  • Google Workspace — bisa diarahkan ke IdP kustom sebagai penyedia SSO ketiga.
  • AWS — lewat IAM identity provider yang menghubungkan Keycloak sebagai sumber federasi.
  • Office 365 / Azure AD — mendukung SAML untuk aplikasi yang butuh federasi dengan sistem identitas korporat.
  • Jira / Confluence — produk Atlassian menyediakan SAML SSO pada paket enterprise dan data center.
SPEntity ID khasACS URL khasKeterangan
Salesforcehttps://salesforce.com atau instance orgURL .../_nc/external/security/.../IdpRedirect.jspButuh certificate dari IdP
Google WorkspaceDomain tujuanURL callback yang diatur di adminDikonfigurasi lewat profile SSO
AWSurn:amazon:webserviceshttps://signin.aws.amazon.com/samlDipakai untuk role mapping via SAML
Azure ADEntity ID aplikasiURL ACS aplikasiSering dipakai sebagai SP sekaligus IdP
Jira / ConfluenceURL instanceURL instance ditambah pathButuh SAML SSO licence

Pertukaran Metadata

Dasar dari setiap integrasi SAML adalah pertukaran metadata dua arah:

  1. Metadata IdP ke SP — kalian mengambil metadata Keycloak dari realms/demo/protocol/saml/descriptor dan mendaftarkannya di aplikasi.
  2. Metadata SP ke IdP — kalian mengambil metadata SP dari aplikasi dan mengimpornya ke Keycloak sebagai SAML client.

Dengan kedua metadata bertukar, kedua pihak otomatis tahu endpoint, kunci, dan binding lawannya. Potongan metadata SP kira-kira seperti ini:

Potongan metadata SP
<md:EntityDescriptor xmlns:md="urn:oasis:names:tc:SAML:2.0:metadata"
                     entityID="https://jira.example.com">
  <md:SPSSODescriptor AuthnRequestsSigned="true"
                      protocolSupportEnumeration="urn:oasis:names:tc:SAML:2.0:protocol">
    <md:AssertionConsumerService Binding="urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"
                                 Location="https://jira.example.com/plugins/servlet/saml/consumer"
                                 index="0" isDefault="true"/>
  </md:SPSSODescriptor>
</md:EntityDescriptor>

Dari metadata ini, Keycloak langsung bisa menyimpulkan entity ID, ACS URL, dan binding yang dipakai SP.

Elemen Konfigurasi SP

Saat mengonfigurasi SP (baik di Keycloak maupun di aplikasi), ada empat elemen yang harus cocok di kedua sisi:

ElemenYang harus samaDampak bila salah
Entity IDIdentitas unik SP di kedua sisiAssertion ditolak karena audience salah
ACS URLTempat SP menerima ResponseResponse tidak pernah sampai, error di SP
Name IDFormat identitas user yang disepakatiUser dikenali sebagai identitas berbeda
AtributNama atribut yang dipetakanAplikasi tidak menerima data yang dibutuhkan

Entity ID adalah identitas yang dipakai Keycloak sebagai nilai audience dalam assertion. Di Keycloak, ini diisi di field Client ID saat membuat SAML client. Pastikan nilainya benar-benar identik dengan yang diharapkan SP — sering kali hanya beda satu huruf atau garis miring di belakang sudah cukup membuat integrasi gagal.

ACS URL

Assertion Consumer Service URL adalah alamat di aplikasi yang menerima Response dari browser. Saat membuat client di Keycloak, kalian menaruh ACS URL di Valid Redirect URIs. Bila SP mengirim URL tanpa tanda garis miring di akhir, kalian harus mendaftarkan dua variasi agar tidak gagal.

NameID dan Attribute Mapping

Setelah SP menerima assertion, aplikasi memetakan NameID ke akun internalnya. Karena itu format NameID harus konsisten — bila SP mengharapkan email, maka Name ID Format di client Keycloak harus email, dan assertion harus membawa alamat email yang cocok dengan akun di aplikasi.

Demikian juga atribut: SP seperti Salesforce sering meminta firstName, lastName, dan email dengan nama tertentu. Kalian membuat mapper di tab Mappers client SAML untuk setiap atribut, lalu menyesuaikan nama atribut SAML-nya persis seperti yang didokumentasikan SP.

Menguji dengan SAML Tracer

Saat integrasi gagal, langkah pertama yang menolong adalah melihat assertion yang dikirim. Alat yang paling sering dipakai:

  • SAML Tracer — ekstensi browser yang menampilkan setiap pesan SAML (request dan response) beserta struktur XML-nya saat kalian menelusuri alur login.
  • SAML decoder — alat untuk mendekode dokumen SAML yang ter-encode, baik yang berbasis URL maupun base64.

Langkah pengujian yang disarankan:

Langkah debugging dengan SAML Tracer
1. Aktifkan SAML Tracer di browser
2. Buka URL aplikasi (SP) lalu klik login
3. Telusuri alur redirect sampai halaman login Keycloak
4. Login dengan user yang benar
5. Di SAML Tracer, pilih permintaan Response terakhir
6. Periksa status, issuer, audience, NameID, dan atribut assertion

Perhatikan: SAMLRequest dari SP muncul saat masuk, SAMLResponse dari IdP muncul saat kembali. Keduanya bisa dibaca mentah di SAML Tracer.

Validasi Assertion

Saat memeriksa assertion, urutan validasinya:

  1. Status response harus Success.
  2. Signature valid — kunci publik cocok dengan kunci signing IdP saat ini.
  3. Audience berisi entity ID SP.
  4. NameID dan atribut sesuai dengan akun yang diharapkan.
  5. Waktu assertion masih dalam NotBefore dan NotOnOrAfter.

Tip

Sebelum mengubah konfigurasi apa pun saat debugging, tangkap dulu assertion yang gagal dengan SAML Tracer. Satu dokumen XML yang utuh jauh lebih informatif daripada membaca log server secara acak.

Error Umum dan Perbaikannya

Error yang munculPenyebab umumSolusi
Invalid signatureKunci signing tidak sinkronImpor ulang metadata IdP ke SP
Audience mismatchEntity ID tidak cocokSamakan audience dengan entity ID SP
NameID format salahFormat tidak disepakatiSet Name ID Format di client Keycloak
ACS URL tidak terdaftarRedirect URI beda tipisTambahkan variasi URL dengan dan tanpa garis miring
Assertion expiredSelisih jam antar serverSinkronkan NTP di semua host
Attribute tidak sampaiNama atribut tidak cocokSesuaikan nama atribut di mapper dengan dokumentasi SP

Catatan khusus tentang signature: setelah kalian memutar kunci signing di Keycloak, assertion yang lama ditandatangani kunci lama akan ditolak SP. Solusinya selalu sama — impor metadata IdP yang baru ke SP.

Penutup

Pada episode 14 ini, kalian menyambungkan aplikasi nyata sebagai SAML service provider ke Keycloak: mengenal SP populer, bertukar metadata dua arah, menyamakan entity ID, ACS URL, NameID, dan atribut di kedua sisi, menguji alur dengan SAML Tracer, serta menangani error khas seperti signature invalid dan audience mismatch.

Inti yang harus dibawa pulang:

  • Metadata dua arah adalah fondasi integrasi — IdP dan SP saling menyalin kemampuan masing-masing.
  • Entity ID, ACS URL, NameID, dan atribut harus identik di kedua sisi — perbedaan sekecil apa pun memicu kegagalan.
  • SAML Tracer adalah alat debugging utama — tangkap assertion dulu, baru ubah konfigurasi.
  • Rotasi kunci harus diikuti impor metadata ulang ke semua SP.

Di episode 15 berikutnya, kita beralih dari autentikasi ke penyimpanan identitas: user federation — menghubungkan Keycloak ke LDAP dan Active Directory agar user tidak perlu diduplikasi di setiap sistem.

Belajar Keycloak - Integrasi SAML Service Provider | Belajar SSO dengan Keycloak