- Keycloak adalah penyedia identitas sumber terbuka yang memusatkan otentikasi, otorisasi, dan SSO untuk berbagai aplikasi menggunakan OAuth 2.0, OpenID Connect, dan SAML.
- Modelnya yang terdiri dari ranah, pengguna, grup, dan peran memungkinkan pengelolaan identitas dan izin yang fleksibel, termasuk federasi dengan direktori eksternal seperti LDAP, Active Directory, atau Azure AD.
- Ini dapat diimplementasikan pada Docker, Kubernetes, atau mesin virtual. Linux dengan PostgreSQL, dan skalabilitas ketersediaan tinggi di belakang reverse proxy dan load balancer seperti Nginx dan Keepalived.
- Token JWT yang diterbitkan oleh Keycloak dapat dikustomisasi menggunakan mapper, memungkinkan model keamanan yang lebih baik yang mudah diintegrasikan ke dalam API dan aplikasi modern.
Di hampir semua aplikasi modern yang Anda gunakan setiap hari (email, media sosial, intranet perusahaan, dasbor pelanggan, dll.) di balik layar, terdapat sistem yang menentukan siapa Anda dan apa yang dapat Anda akses. Ketika perusahaan mulai mengumpulkan aplikasi, layanan, dan API, mengelola pengguna, kata sandi, izin, dan sesi secara manual menjadi sangat merepotkan.
Keycloak muncul tepat pada waktunya untuk menyelesaikan kekacauan itu.Keycloak adalah platform manajemen identitas dan akses yang memusatkan otentikasi, otorisasi, dan single sign-on untuk berbagai aplikasi. Alih-alih setiap aplikasi mengimplementasikan sistem login, peran, dan pemulihan kata sandi sendiri, Keycloak menangani semuanya, dan aplikasi cukup mempercayainya menggunakan standar seperti OAuth 2.0, OpenID Connect, atau SAML 2.0.
Apa itu Keycloak dan apa perannya dalam keamanan IAM?
Keycloak adalah IdP (Penyedia Identitas) sumber terbuka.Ditulis dalam bahasa Java dan dikelola oleh Red Hat (sebelumnya JBoss), perangkat lunak ini dilisensikan di bawah Apache 2.0, sehingga dapat digunakan dan diadaptasi secara bebas bahkan di lingkungan komersial. Tersedia versi berbayar tingkat perusahaan yang disebut Red Hat Single Sign-On, tetapi fungsi intinya tetap sama.
Server identitas ini menyediakan SSO, federasi, dan multi-tenancy.Ini memungkinkan pengguna untuk masuk sekali dan mengakses banyak aplikasi, dengan aplikasi-aplikasi tersebut mendelegasikan otentikasi ke Keycloak, dan pengelolaan pengguna, grup, atribut, dan izin dilakukan secara terpusat, tanpa perlu mengimplementasikan ulang hal yang sama di setiap proyek.
Keycloak menonjol dibandingkan solusi IAM lainnya. (gratis, sumber terbuka, atau berpemilik) berdasarkan kematangan, adopsi, dan kompatibilitasnya dengan protokol standar. Meskipun demikian, solusi yang tepat untuk setiap organisasi akan bergantung pada kebutuhannya (dukungan komersial, SLA, fungsionalitas spesifik, penerapan di tempat versus SaaS, dll.).
Salah satu kekuatan Keycloak Ini menggabungkan beberapa komponen: otentikasi berbasis OAuth 2.0 dan OpenID Connect, dukungan SAML 2.0, login sosial (Google, Facebook(GitHub, dll.), integrasi dengan LDAP dan Active Directory, administrasi melalui konsol web, CLI dan REST API, serta model pengguna, grup, dan peran yang fleksibel yang tercermin dalam token yang diterbitkan untuk aplikasi.

Persyaratan dasar: OAuth 2.0, OpenID Connect, dan JWT
Untuk sepenuhnya memahami apa yang dilakukan Keycloak, ada baiknya memahami tiga konsep berikut ini.OAuth 2.0, OpenID Connect (OIDC), dan JSON Web Tokens (JWT). Anda tidak perlu menjadi ahli, tetapi Anda perlu memahami konsep umumnya, karena semuanya berputar di sekitar hal-hal tersebut.
OAuth 2.0 sebagai kerangka kerja otorisasi
OAuth 2.0 adalah kerangka kerja otorisasi API standar.Digunakan oleh perusahaan raksasa seperti Google, Facebook, Microsoft, GitHub, dan LinkedIn, fungsi utamanya adalah untuk memungkinkan aplikasi (klien) mengakses sumber daya pengguna di aplikasi atau API lain, dengan izin eksplisit dari pengguna, tanpa harus terus-menerus berbagi kredensial.
Alih-alih mengirimkan nama pengguna dan kata sandi di setiap permintaanOAuth 2.0 memperkenalkan konsep token akses: token akses berumur pendek yang dikirim dalam panggilan HTTP ke API dan divalidasi oleh API. IdP (misalnya, Keycloak) menerbitkan token ini setelah memverifikasi identitas dan persetujuan pengguna.
Standar tersebut mendefinisikan beberapa alur otorisasi (tipe pemberian izin). untuk menyesuaikan proses dengan jenis klien: aplikasi backend yang aman, SPA berbasis browser, apps perangkat seluler, perangkat terbatas, komunikasi antar mesin, dll. Setiap alur menandai apa yang dipertukarkan pada setiap langkah (kode otorisasi, token, kredensial, dll.).
Empat peran fundamental OAuth 2.0 suara:
- Pemilik Sumber Daya: biasanya pengguna yang datanya ingin Anda lihat atau ubah.
- Konfirmasi: aplikasi (web, seluler, IOT(backend…) yang ingin bertindak atas nama pengguna.
- server sumber daya: API yang mengekspos data dan memvalidasi token akses.
- Server Otorisasi: IdP (Keycloak) yang mengautentikasi pengguna dan menerbitkan token.
Selain itu, OAuth 2.0 memperkenalkan konsep cakupan (scopes).Ini mendefinisikan ruang lingkup izin yang diberikan pengguna kepada aplikasi: membaca email, memposting di jejaring sosial, mengakses profil dasar, dll. Token yang diterbitkan mengkodekan izin mana yang sebenarnya telah diberikan kepada klien.
OpenID Connect: lapisan identitas di atas OAuth 2.0
OpenID Connect (OIDC) menambahkan identitas ke OAuth 2.0Sementara OAuth berkaitan dengan otorisasi (apa yang dapat dilakukan oleh suatu aplikasi), OIDC berkaitan dengan mengidentifikasi secara standar siapa pengguna yang diautentikasi dan bagaimana cara memperoleh data dasar mereka.
OIDC mendefinisikan titik akhir dan metadata yang dikenal luas., seperti dokumen penemuan yang diterbitkan di rute tersebut /.well-known/openid-configuration di mana penyedia menentukan URL otorisasi, token, kunci publik, informasi pengguna, dll. Hal ini memungkinkan aplikasi dikonfigurasi hampir secara otomatis.
Ini juga menyediakan endpoint UserInfo.Ini digunakan untuk mengambil informasi dari pengguna yang telah diautentikasi (nama, email, dll.) menggunakan token akses yang valid. Sangat umum dalam integrasi berbasis Keycloak untuk membaca data ini setelah login untuk mengisi profil pengguna di aplikasi.
Access_token dan JSON Web Tokens (JWT)
Dalam banyak implementasi modern, access_token adalah JWT. (JSON Web Token). Ini adalah standar (RFC 7519) untuk merepresentasikan klaim sebagai JSON yang ditandatangani secara digital, dalam tiga bagian yang dipisahkan oleh titik: header, payload, dan tanda tangan, semuanya dikodekan dalam Base64URL.
Header tersebut menunjukkan informasi teknis tentang token. (algoritma tanda tangan, jenis token, dan seringkali pengidentifikasi kunci yang digunakan, kidPayload tersebut berisi klaim-klaim, seperti:
- expTanggal kedaluwarsa.
- iat: waktu siaran.
- iss: penerbit, biasanya URL IdP.
- di bawah: pengidentifikasi pengguna unik.
- aud: audiens yang menjadi sasaran token tersebut.
- JTI: pengidentifikasi unik dari token.
Tanda tangan dihasilkan dengan kunci pribadi atau rahasia.Oleh karena itu, setiap modifikasi pada token akan merusak tanda tangan dan terdeteksi selama validasi. API memperoleh kunci publik dari IdP berkat properti tersebut. jwks_uri dari dokumen penemuan, yang menunjuk ke file JSON yang berisi daftar kunci publik dan informasinya. kid.
Keycloak juga memungkinkan kustomisasi token yang diterbitkan.Klaim tambahan dapat ditambahkan berdasarkan atribut pengguna, grup, peran, atau bahkan nilai tetap. Hal ini dilakukan menggunakan mapper yang dikonfigurasi per klien atau per cakupan klien, sehingga memudahkan API untuk menerima informasi yang tepat sesuai kebutuhannya.

Arsitektur Keycloak: Realm, Pengguna, Grup, dan Peran
Keycloak mengatur konfigurasinya dalam Realms.Ini seperti "server identitas virtual" dalam satu instalasi. Vendor lain menyebut hal serupa sebagai tenant atau direktori. Setiap realm memiliki pengguna, grup, klien, kebijakan, dan pengaturan independennya sendiri.
Secara default terdapat ranah khusus yang disebut master.Akun ini sebaiknya dikhususkan untuk tugas administratif global, seperti membuat dan mengelola realm lain. Pengguna administrator dapat mengelola beberapa realm dari konsol yang sama tanpa harus masuk dengan akun berbeda untuk setiap realm.
Pengguna lokal dapat didefinisikan dalam suatu ranah.dengan memberikan atribut khusus kepada mereka, mengelompokkan mereka, dan menghubungkan mereka dengan peran. Model ini dirancang dengan cermat sehingga informasi yang relevan pada akhirnya tercermin dalam token yang digunakan oleh aplikasi (peran, grup, data profil, flag keamanan, dll.).
Grup memungkinkan pengguna untuk diorganisir secara hierarkis.Suatu grup dapat memiliki subgrup (anak), dan seorang pengguna mewarisi atribut dan peran dari semua grup tempat mereka berada, termasuk grup induknya. Hal ini memungkinkan model otorisasi yang sangat fleksibel tanpa harus mengulang konfigurasi untuk setiap pengguna.
Dari segi peran, ada dua tingkatan utama.:
- Peran ranah: variabel global dalam ranah tersebut, banyak digunakan untuk izin lintas properti.
- Peran klien: spesifik untuk aplikasi tertentu, memungkinkan granularitas yang halus untuk setiap layanan.
Keycloak mendukung peran komposit.Artinya, peran yang pada gilirannya mencakup peran lain. Ini membantu mengelompokkan izin dan menetapkannya sekaligus kepada pengguna atau grup, meskipun sebaiknya tidak digunakan secara berlebihan untuk menghindari kerumitan manajemen atau memengaruhi kinerja.
Menginstal Keycloak dalam mode pengembangan: Docker, Kubernetes, dan VM
Untuk menyiapkan lingkungan lab dengan Keycloak Ada beberapa opsi sederhana: kontainer Docker, penyebaran di Kubernetes (misalnya dengan Minikube) atau instalasi klasik pada mesin virtual dengan Linux dan OpenJDK.
Keycloak di Docker
Cara tercepat untuk memulai Keycloak untuk pengujian Ini melibatkan menjalankan kontainer dengan citra resmi, mengekspos port 8080 dan meneruskan nama pengguna dan kata sandi administrator melalui variabel lingkungan, lalu melakukan booting ke mode tersebut. start-dev (tanpa HTTPS dan dengan basis data H2 tertanam):
Dengan satu perintah Docker server yang berfungsi diperoleh dalam http://localhost:8080, cukup untuk mengutak-atik konsol administrasi, membuat realm, pengguna, klien, dan menguji integrasi dasar.
Keycloak di Kubernetes dengan Minikube
Jika Anda sudah terbiasa bekerja dengan Kubernetes, Anda dapat dengan mudah menerapkan Keycloak. Dengan menggunakan manifest contoh dari repositori resmi, Anda membuat Deployment dan Service, lalu membuka tunnel dengan Minikube untuk mengakses service dari mesin Anda, biasanya lagi-lagi di port 8080.
Pendekatan ini ideal untuk mensimulasikan lingkungan yang lebih mendekati lingkungan produksi. (dengan pod, layanan, konfigurasi eksternal, dll.) dan untuk bereksperimen dengan penyebaran, penskalaan, dan peningkatan Keycloak yang terkontrol pada klaster K8s.
Keycloak di Ubuntu dengan OpenJDK dan PostgreSQL (mode pengembangan tingkat lanjut)
Kemungkinan lain adalah menginstal Keycloak pada mesin virtual Ubuntu. Menggunakan OpenJDK dan basis data PostgreSQL lokal, dengan sertifikat yang ditandatangani sendiri dan nama host khusus. Meskipun masih merupakan skenario pengujian, ini semakin mendekati topologi produksi.
Langkah-langkah umumnya meliputi::
- Perbarui sistem operasi dan instal Java (misalnya, OpenJDK 11 atau lebih tinggi).
- Instal PostgreSQL (idealnya di server terpisah, meskipun di lingkungan lab bisa berada di mesin yang sama).
- Buat pengguna dan basis data khusus untuk Keycloak dan berikan hak akses yang sesuai.
- Buat pengguna sistem tanpa hak akses (misalnya,
keycloak) untuk menjalankan layanan tersebut. - Unduh distribusi resmi Keycloak, ekstrak ke
/opt/keycloakdan sesuaikan izinnya. - Hasilkan sertifikat X.509 yang ditandatangani sendiri dengan openssl dan mengaturnya
keycloak.confbeserta parameter koneksi PostgreSQL danhostnamediinginkan. - Definisikan sebuah unit systemd Untuk menjalankan Keycloak dalam mode pengembangan saat sistem diny启动, atur kredensial administrator melalui variabel lingkungan.
Setelah layanan tersebut aktif dan berjalanBiasanya diakses melalui HTTPS pada port 8443 dengan nama host yang telah dikonfigurasi. Jika sertifikat yang ditandatangani sendiri digunakan, sertifikat tersebut perlu dipercaya di browser (dengan mengimpor CA atau sertifikat itu sendiri ke dalam penyimpanan sertifikat tepercaya pada mesin).
Implementasi tingkat lanjut: ketersediaan tinggi, PostgreSQL, dan reverse proxy.
Saat kita beralih dari laboratorium ke produksiSituasinya berubah: Anda harus memikirkan ketersediaan tinggi, persistensi data yang kuat, sertifikat yang valid, dan seringkali, proksi terbalik yang memusatkan akses HTTPS dan penyeimbangan beban.
Pola yang cukup umum adalah menerapkan beberapa node Keycloak. Di belakang load balancer (misalnya, Nginx) dan menggunakan database PostgreSQL dalam mode HA sebagai backend penyimpanan data. Tujuannya adalah untuk menghilangkan titik kegagalan tunggal baik untuk lapisan aplikasi maupun lapisan data.
Dalam jenis arsitektur ini, langkah-langkah seperti berikut biasanya diikuti::
- Siapkan server Linux yang sudah diperbarui (Debian/Ubuntu) dan instal dependensinya:
unzip,wget,openjdk,openssl, Dll - Buat pengguna sistem
keycloakdengan rumah di/opt/keycloakdan tanpa izin masuk interaktif yang istimewa. - Unduh versi Keycloak yang diinginkan, ekstrak file-nya, dan tetapkan kepemilikan kepada pengguna yang bersangkutan.
- Buat basis data khusus di PostgreSQL, dengan pengguna dan hak akses yang sesuai, serta sesuaikan pemilik skema dan izin default pada tabel.
- Hasilkan sertifikat yang ditandatangani sendiri (atau gunakan sertifikat dari CA internal) untuk node Keycloak dan konfigurasikan HTTPS pada server aplikasi.
- Menyesuaikan
keycloak.confUntuk terhubung ke VIP PostgreSQL, tentukan port HTTP/HTTPS, sertifikat, parameter proxy, nama host, tumpukan klaster (misalnya, UDP), dan level log. - Mendefinisikan sebuah layanan
systemdsederhana itu boot Jubah kunci dengankc.sh startokc.sh start --optimizedMengelola restart otomatis jika terjadi kegagalan.
Nginx biasanya diinstal di atas lapisan penerbitan dan penyeimbangan beban. sebagai proksi terbalik HTTPS, dengan sertifikat TLS sendiri dan konfigurasi hulu yang mengarah ke node Keycloak pada port backend-nya (biasanya 8080 jika TLS diakhiri di Nginx).
Untuk menghilangkan titik kegagalan tunggal pada penyeimbang.Umumnya, dua node Nginx dikonfigurasi dalam mode ketersediaan tinggi menggunakan Keepalived. Alat ini mengelola IP virtual (VIP) mengambang yang diiklankan pada salah satu server sebagai master dan, jika terjadi kegagalan, beralih ke node cadangan, sehingga menjaga kontinuitas layanan.
Menyiapkan Realm, pengguna, dan pendaftaran aplikasi (klien)
Setelah Keycloak terpasang dan berjalan, langkah logis selanjutnya adalah... Ini melibatkan pembuatan ranah (realm) untuk pengguna dan aplikasi kita, dan dari sana mendefinisikan pengguna, grup, peran, dan klien (aplikasi yang akan mendelegasikan otentikasi ke Keycloak).
Realm baru dibuat dari Konsol Admin. Cukup dengan memasukkan namanya. Mulai saat itu, kita akan memiliki ruang terpisah dengan pengaturannya sendiri. Di antara penyesuaian pertama, berikut ini biasanya berguna:
- Konfigurasikan SMTP untuk mengirim email (verifikasi email, pemulihan kata sandi, notifikasi).
- Aktifkan jika diinginkan Profil Pengguna Deklaratif, yang memungkinkan Anda untuk secara deklaratif mendefinisikan atribut apa yang akan dimiliki pengguna, validasi apa yang berlaku, dan apakah atribut tersebut dapat diedit oleh pengguna.
- Sesuaikan parameter login: izinkan atau larang pendaftaran mandiri, ingat sesi di antara restart browser, izinkan pemulihan kata sandi, dll.
Membuat pengguna di sebuah realm semudah mengisi formulir. Anda memerlukan nama pengguna, alamat email, nama depan, dan nama belakang. Kemudian, Anda mengatur kata sandi (sementara atau permanen) dari tab kredensial. Dari sana, Anda dapat menetapkan grup, peran, dan atribut tambahan.
Keycloak menawarkan Konsol Akun khusus untuk pengguna akhir.Di mana mereka dapat melihat dan memodifikasi data profil mereka, mengubah kata sandi, meninjau sesi aktif, atau mengelola faktor otentikasi tambahan. Ini adalah cara yang sangat nyaman untuk mendelegasikan beberapa administrasi dasar akun mereka kepada pengguna.
Peniruan identitas adalah fitur menarik lainnya.Seorang administrator yang memiliki izin dapat "menyamar" sebagai pengguna dari konsol untuk mereproduksi masalah, memverifikasi izin, dan lain sebagainya, tanpa memerlukan kata sandi pengguna.
Untuk aplikasi yang menggunakan Keycloak sebagai IdP (Penyedia Identitas).Perangkat tersebut harus didaftarkan sebagai klien. Di bagian Klien, ID klien baru dibuat, jenisnya ditunjukkan sebagai OpenID Connect (kecuali jika SAML akan digunakan), dan alur OAuth 2.0 yang diizinkan dipilih: Alur Standar (Kode Otorisasi), Pemberian Akses Langsung (Kata Sandi), Implisit, Kredensial Klien (akun layanan), Kode Perangkat, CIBA, dll.
Konfigurasi klien juga menentukan Jika autentikasi klien (rahasia klien atau sertifikat) diperlukan, URI pengalihan mana yang valid dan asal web mana yang diizinkan (sangat penting dalam SPA karena kebijakan CORS). Dari situ, aplikasi dapat menggunakan pustaka resmi atau pihak ketiga untuk mendelegasikan autentikasi ke Keycloak melalui OIDC.
Integrasi dengan direktori eksternal dan penyedia identitas lainnya
Keycloak dapat berfungsi sebagai sumber identitas lokal. (pengguna, grup, dan peran yang didefinisikan dalam basis datanya sendiri) atau dapat bertindak sebagai perantara identitas untuk satu atau lebih penyedia eksternal.
Integrasi yang sangat umum adalah dengan Azure Active Directory.Azure AD menyimpan pengguna dan grup perusahaan, dan Keycloak terhubung sebagai klien OIDC untuk mengunduh identitas dan grup, memetakannya ke pengguna dan peran lokal. Hal ini menghindari duplikasi identitas dan tugas administratif di berbagai lokasi.
Secara umum, untuk menggunakan Azure AD sebagai IdP eksternal berikut ini dilakukan:
- Daftarkan aplikasi di Azure AD, dapatkan ID kliennya, dan buat rahasia klien.
- Konfigurasikan URI pengalihan ke Keycloak (endpoint broker OIDC di realm yang sesuai) di Azure AD.
- Sesuaikan klaim yang akan diterbitkan dalam token di aplikasi Azure AD, misalnya dengan menyertakan grup pengguna.
- Di Keycloak, buat Penyedia Identitas OpenID Connect yang mengarah ke titik akhir Azure (otorisasi, token, logout, informasi pengguna) dan konfigurasikan ID klien, rahasia klien, dan parameter login yang diinginkan.
Setelah kepercayaan terjalin di antara merekaSaat pengguna masuk melalui Azure AD, Keycloak membuat (atau menyinkronkan) pengguna secara lokal dan dapat memetakan grup Azure ke peran Keycloak menggunakan pemetaan tingkat lanjut. Misalnya, grup "Pengembang" di Azure dapat diterjemahkan ke dalam peran "Pengembang" di Keycloak, yang kemudian diluncurkan ke aplikasi dan layanan terintegrasi (seperti Jenkins).
Selain Azure AD, Keycloak memungkinkan federasi identitas dengan LDAP, Active Directory klasik, IdP OIDC lainnya, penyedia media sosial (Google, Facebook, GitHub, dll.) dan banyak lagi, serta kemampuan untuk menggabungkan beberapa sumber secara bersamaan dalam ranah yang sama.
Keamanan tambahan: bot, CAPTCHA, dan praktik terbaik.
Meskipun Keycloak sangat memperkuat keamanan otentikasi (MFA, kebijakan kata sandi, penguncian akun, kontrol sesi, dll.), halaman login, pendaftaran, dan pemulihan kata sandi tetap menjadi target yang jelas bagi bot dan serangan otomatis.
Untuk mengurangi jenis ancaman iniDisarankan untuk menggabungkan Keycloak dengan mekanisme anti-bot seperti solusi CAPTCHA yang sesuai dengan GDPR yang membedakan antara lalu lintas manusia dan otomatis tanpa mengganggu pengalaman pengguna. Solusi ini biasanya diintegrasikan ke dalam formulir login dan registrasi, menambahkan lapisan pertahanan ekstra terhadap serangan pengisian kredensial, pembuatan akun massal, atau penyalahgunaan alur pemulihan kata sandi.
Selain CAPTCHA, praktik baik lainnya meliputi: monitor log Untuk akses, atur peringatan untuk lonjakan anomali dalam upaya yang gagal, tinjau secara berkala token yang diterbitkan dan durasinya, pastikan hanya endpoint yang diperlukan yang diekspos ke luar, dan perbarui Keycloak dan dependensinya dengan patch keamanan terbaru.
Seluruh ekosistem fungsionalitas ini (SSO, multi-tenancy, integrasi dengan direktori eksternal, token yang dapat dikonfigurasi, penerapan ketersediaan tinggi, dan perlindungan bot) menjadikan Keycloak sebagai alat yang sangat ampuh untuk memusatkan otentikasi dan otorisasi untuk aplikasi modern, membantu perusahaan memperkuat postur keamanan mereka tanpa mengorbankan pengalaman pengguna atau terus-menerus menciptakan kembali manajemen identitas.
Penulis yang bersemangat tentang dunia byte dan teknologi secara umum. Saya suka berbagi ilmu melalui tulisan, dan itulah yang akan saya lakukan di blog ini, menunjukkan kepada Anda semua hal paling menarik tentang gadget, perangkat lunak, perangkat keras, tren teknologi, dan banyak lagi. Tujuan saya adalah membantu Anda menavigasi dunia digital dengan cara yang sederhana dan menghibur.

