Membuka pintu social login dengan identity brokering: mengenal penyedia seperti Google, GitHub, dan Facebook, membuat OAuth app dan mengatur redirect URI, memetakan scope serta atribut, mengelola first broker login dan account linking, sampai menambahkan identity provider kustom.

Di episode 15 kalian menghubungkan Keycloak dengan direktori eksternal seperti LDAP dan Active Directory. Episode 16 ini menambahkan pintu masuk yang berbeda: social login lewat identity brokering. Kalian akan mengizinkan user masuk dengan akun Google, GitHub, Facebook, dan lainnya — sementara Keycloak tetap menjadi pusat yang memegang sesi, menyambungkan akun eksternal ke identitas internal, dan memperkaya profil user dari claims penyedia.
Identity brokering adalah pola di mana Keycloak berperan sebagai perantara: ia tidak memegang kredensial user, tetapi menerima identitas dari penyedia eksternal (broker) dan meneruskannya ke aplikasi. Berbeda dengan user federation yang membaca langsung dari direktori, di sini autentikasi terjadi di sisi penyedia, lalu hasilnya diserahkan ke Keycloak.
Secara teknis, tiap penyedia eksternal adalah sebuah identity provider yang terdaftar di realm lewat tab Identity Providers di admin console. Keycloak menjadi brokered IdP bagi aplikasi-aplikasinya: aplikasi tetap berbicara dengan Keycloak (OIDC atau SAML), tidak pernah tahu bahwa user sebenarnya login di Google.
| Provider | Protokol | Yang perlu disiapkan | Redirect URI di Keycloak |
|---|---|---|---|
| OIDC | OAuth client di Google Cloud Console | https://keycloak.example.com/realms/demo/broker/google/endpoint | |
| GitHub | OAuth 2.0 | OAuth App di GitHub | https://keycloak.example.com/realms/demo/broker/github/endpoint |
| OAuth 2.0 | App di Facebook for Developers | https://keycloak.example.com/realms/demo/broker/facebook/endpoint | |
| Microsoft | OIDC | App registration di Azure | https://keycloak.example.com/realms/demo/broker/microsoft/endpoint |
| OAuth 2.0 | App di LinkedIn Developer Portal | https://keycloak.example.com/realms/demo/broker/linkedin/endpoint | |
| OAuth 2.0 | App di Twitter Developer | https://keycloak.example.com/realms/demo/broker/twitter/endpoint |
Redirect URI di kolom terakhir adalah alamat yang harus kalian daftarkan di setiap portal developer penyedia. Tanpa daftar ini, penyedia akan menolak callback dengan error redirect_uri_mismatch.
Langkahnya selalu dimulai dari portal developer penyedia:
1. Buka portal developer penyedia (Google Cloud, GitHub, dan lain-lain)
2. Buat aplikasi atau OAuth client baru
3. Catat client ID dan client secret yang diberikan
4. Daftarkan redirect URI Keycloak untuk broker tersebut
5. Pilih scope yang ingin diminta (email, profile)
6. Simpan dan catat kredensialnyaContoh daftar redirect URI yang didaftarkan di portal developer:
https://keycloak.example.com/realms/demo/broker/google/endpoint
https://keycloak.example.com/realms/demo/broker/github/endpoint
https://keycloak.example.com/realms/demo/broker/facebook/endpointclient_id dan client_secret lalu dimasukkan ke Keycloak pada tab Identity Providers untuk provider yang bersangkutan.
Scope menentukan data apa yang diminta dari penyedia — paling dasar adalah email dan profile. Di Keycloak, claims yang diterima bisa dipetakan ke atribut profil user lewat mapper. Misalnya claim email dari Google dijadikan nilai email user Keycloak, dan nama dari profile dipakai mengisi nama depan serta nama belakang.
Aturan praktisnya: minta scope sesedikit mungkin. Setiap data yang tidak diminta tidak akan diterima, dan setiap data yang diterima adalah tanggung jawab kalian untuk melindunginya.
Saat user pertama kali login lewat penyedia eksternal, Keycloak menjalankan first broker login flow — alur khusus untuk menghubungkan identitas eksternal ke akun internal:
Account linking adalah proses menggabungkan identitas eksternal dengan akun Keycloak. Ada dua pendekatan:
Untuk keamanan, mekanisme manual lebih kuat: tanpa itu, siapa pun yang menguasai akun Google dengan alamat email milik user lain bisa membajak akun tersebut.
Claims dari penyedia tidak hanya dipakai untuk masuk — bisa juga memperkaya profil user. Mapper mengisi atribut seperti lokasi, bahasa, atau avatar dari data penyedia. Namun perhatikan juga trust levels: data yang diklaim penyedia tidak selalu terverifikasi. Klaim email_verified dari penyedia harus diperlakukan berbeda dari email yang diverifikasi Keycloak sendiri.
Important
Account linking otomatis berbasis email itu nyaman, tetapi rawan account takeover bila penyedia tidak memverifikasi kepemilikan alamat email. Untuk aplikasi yang menangani data sensitif, gunakan alur manual yang meminta konfirmasi login akun lokal sebelum menghubungkan.
Selain penyedia sosial, Keycloak mendukung identity provider kustom:
Ini membuat Keycloak bisa menjadi hub federation: aplikasi berbicara ke satu Keycloak, sementara di belakangnya Keycloak berbicara ke Google, GitHub, IdP korporat, dan LDAP sekaligus.
Setiap identity provider memakai sebuah alias yang menjadi bagian dari redirect URI broker, misalnya google, github, atau corporate. Alias ini juga menjadi identitas yang dipakai Keycloak untuk menautkan akun: ketika seorang user terhubung ke lebih dari satu penyedia, Keycloak mencatat setiap kombinasi alias dan identitas eksternalnya.
Untuk keamanan, ada beberapa kebiasaan yang perlu dijaga:
client_secret di tempat aman — ia adalah kredensial yang menautkan Keycloak dengan penyedia, setara dengan password.client_id dan client_secret yang masuk ke Keycloak sebaiknya diambil langsung dari portal developer, bukan disalin lewat email atau pesan yang bisa dicegat.
Pada episode 16 ini, kalian membuka social login lewat identity brokering: konsep broker dan tab Identity Providers; penyedia Google, GitHub, Facebook, Microsoft, LinkedIn, dan Twitter; pembuatan OAuth app dengan client ID, client secret, dan redirect URI; pemetaan scope serta atribut; alur first broker login, account linking, dan enrichmen profil; plus identity provider kustom berbasis OIDC dan SAML.
Inti yang harus dibawa pulang:
Di episode 17 berikutnya, kita melengkapi manajemen identitas dari sisi provisioning: SCIM — protokol REST untuk membuat, mengubah, dan menghapus user lintas sistem secara otomatis.