Sebagai pengguna yang terdaftar di berbagai layanan internet, atau pun sebagai pekerja yang kesehariannya menggunakan aplikasi yang sudah banyak beralih ke komputasi awan (baca: perangkat lunak & platform berbentuk layanan), mengingat setiap kombinasi user dan password bukanlah hal yang menyenangkan. Di sisi lain, ancaman peretasan yang selalu menghantui membuat pengguna harus merangkai kata sandi yang unik dan kuat di setiap situs yang digunakan. Metode Single Sign On (disingkat SSO) adalah solusi yang muncul dan banyak didukung secara luas oleh berbagai penyedia layanan di internet. Pada tulisan ini, penulis akan mencoba menguraikan dua standar SSO yang paling banyak didukung saat ini. Masih belum familiar bagaimana Single Sign On bekerja? Bisa jadi pembaca sudah menggunakannya tanpa pernah sadar. Misalnya situs
detik.com pada gambar di bawah ini yang memiliki opsi untuk masuk atau pun mendaftar menggunakan akun Facebook atau pun Google account. Dengan kata lain secara pengalaman pengguna, kita dapat diautentikasi menggunakan akun yang sudah
kita miliki sebelumnya tanpa perlu membuat nama pengguna baru ataupun kata sandi yang harus kita catat. Di balik layar, ada tiga pihak yang berperan dalam pertukaran informasi di dalam proses proses autentikasi di atas. Secara umum bisa dijabarkan sebagai berikut: Teknologi SSO yang paling umum saat ini adalah
SAML dan Open ID. Di mana Open ID banyak digunakan oleh layanan yang diakses pengguna umum seperti contoh website di atas. Sedangkan SAML banyak digunakan oleh pekerja di perusahaan/ organisasi enterprise. Apakah yang membedakan? Secara de-facto organisasi enterprise memiliki standar keamanan
yang sangat tinggi terkait autentikasi, di mana proses autentikasi tidak dapat diberikan kepada penyedia identitas pihak ketiga. Selain autentikasi, organisasi enterprise juga memiliki level otorisasi yang berbeda bagi setiap pengguna, dan juga level otorisasi yang berbeda di setiap aplikasi. Secara eksplisit dari penjelasan diatas, kita dapat memahami bahwa Open ID tidak dipilih karena sifatnya yang terbuka sesuai namanya. Namun hal ini juga menjadi bahasan yang menarik, yaitu
bagaimana SAML dapat mendukung fungsi-fungsi autentikasi dan otorisasi yang dibutuhkan oleh organisasi enterprise? Sesuai judul tulisan ini, kita akan membahas terlebih dahulu SAML dan juga pengaplikasiannya di organisasi enterprise. SAML (Security Assertion Markup Language)SAML (dibaca sam-el) adalah protokol SSO standar terbuka yang memberikan fungsi autentikasi dan otorisasi berbasis assertion (penegas) berupa XML. Diperkenalkan pada tahun 2001 dan mendapat pembaruan besar pada tahun 2005 sampai saat ini, yaitu SAML 2.0. Secara luas SAML menjadi standar yang paling banyak digunakan oleh aplikasi perangkat lunak/ platform berbentuk layanan (SaaS/PaaS) enterprise, sebut saja: Salesforce, Box, Jira, ServiceNow, Github, Workday, Cisco Meraki. Alur autentikasi SAMLBerikut adalah alur autentikasi dari SAML: Alur autentikasi SAMLKita bisa mempraktikkan dengan mengamati alur autentikasi SAML dengan cara memasang pengaya SAML tracer di browser kita, contoh pengaya yang penulis pakai bisa didapat disini: SAML-Tracer. Di bawah ini adalah hasil trace ketika penulis masuk ke aplikasi Salesforce, yang kemudian mengalihkan halaman ke penyedia identitas Okta. Halaman login Okta SAML SSOSAML Response yang diberikan Penyedia IdentitasSAML Reponse yang di-post ke Penyedia LayananX.509 CertificateSAML menggunakan sertifikat yang ditandatangani secara digital sebagai autentikasi. Dapat dilihat pada gambar di atas, X.509 sertifikat yang ditandatangani di POST ke penyedia layanan untuk autentikasi. Sebagai pengembang aplikasi, bagaimana saya mengadopsi SSO berbasis SAML di aplikasi saya?Untuk memulai saya menyarankan untuk terlebih dahulu membaca dokumen teknis SAML disini: SAML Tech Overview. Setelah itu, bisa dilanjutkan untuk memilih system stack yang sesuai untuk aplikasi yang dibuat. Berikut adalah beberapa alternatif sumber terbuka yang bisa kamu pakai dari eksplorasi penulis.
Sebagai arsitek, ataupun konsultan IT bagaimana saya memilih penyedia identitas SSO SAML bagi perusahaan/ aplikasi saya?Untuk memilih penyedia identitas, bisa dimulai dengan menyesuaikan dengan kebutuhan dan budget yang dimiliki. Dari pengalaman penulis, berikut rekomendasi penyedia layanan identitas yang pernah penulis pakai. Mohon dicatat layanan berikut ini berupa Identitas berbentuk layanan (Idaas) berbayar.
2. Ping Identity: Juga kaya akan fitur yang dibutuhkan perusahaan enterprise seperti autentikasi terdelegasi ke Active Directory, SCIM provisioning, Open ID, dll. Ping Identity juga memiliki alternatif Active Directory : Ping Directory. Namun secara manajemen pengguna, dan SSO on-premise web application secara subjektif penulis, OKTA memiliki fitur yang lebih lengkap dan praktis untuk digunakan. Ping Identity. Sumber gambar: https://www.pingidentity.com/en/platform/extensibility.html3. Azure Active Directory: Penyedia Identitas dari Microsoft. Secara native terintegrasi dengan ekosistem Microsoft (tentu saja), seperti Office 365 suite (Exchange, Sharepoint, One Drive, OneNote, Teams, dll), Active Directory (AD/ADFS), Azure Public Cloud/Stack/ Hybrid, dan masih banyak lainnya. Secara fungsi dan fitur tentunya sudah sangat memenuhi kebutuhan perusahaan enterprise. Alternatif Kode Sumber TerbukaUntuk pembaca yang ingin membuat server aplikasi manajemen identitas berbasis SAML secara on-premise dan juga bersumber terbuka (open source), alternatif berikut bisa menjadi pilihan: WSO2, Keycloak. Kesimpulan dari standar SSO SAML?Setelah kita membedah SSO SAML mulai dari mempelajari alur autentikasi, membuat aplikasi web yang mendukung SAML, dan juga memilih penyedia identitas. Dapat kita garis bawahi beberapa kesimpulan berikut:
Open IDOpen ID adalah standar autentikasi terbuka yang diperkenalkan oleh Open ID Foundation. Diperkenalkan pada tahun 2006, dan pada Februari 2014 generasi ketiga Open ID disebut Open ID Connect (OIDC) diluncurkan. Penyempurnaan ini menambahkan layer autentikasi yang berbasis otorisasi OAuth 2.0, yang dapat digunakan untuk bertukar informasi pengguna menggunakan RESTful HTTP API dengan format JSON. Pada Maret 2016 diperkirakan lebih dari 1 miliar akun Open ID dipergunakan untuk melakukan autentikasi di situs-situs internet. Sebut saja penyedia identitas yang populer seperti Google dan Facebook, kita hampir melihat mereka di hampir semua situs populer dalam opsi pendaftaran dan halaman masuk. Alur autentikasi OIDCBerikut adalah alur Autentikasi OIDC secara umum: Alur Autentikasi Open ID Connect — Kode OtorisasiAlur Autentikasi Open ID Connect — ImplisitAlur Autentikasi Open ID Connect — HybridAda beberapa alur autentikasi OIDC yang dijelaskan sebagai berikut:
Untuk berkenalan dan mempraktikkan langsung, kita bisa melakukan debugging sederhana autentikasi OIDC menggunakan tools debugger yang dibuat oleh para developer — yang baik hati, yang dibuat untuk membantu kita belajar : OpenID Connect debugger, OpenID Connect Playground, OKTA OIDC Example. Halaman Client. https://oidcdebugger.com/Halaman login Google Open ID. https://oidcdebugger.com/Kode Otorisasi dan ID Token yang diberikan Google sebagai penyedia identitas. https://oidcdebugger.com/Open ID TokenAutentikasi Open ID menggunakan token berformat JSON. Ada tiga jenis token dalam spesifikasi OIDC, yaitu:
Terlihat bagi yang familiar dengan autentikasi OAuth2 alur autentikasi OIDC sangat identik dengan OAuth2. Yup, seperti yang pernah penulis utarakan di awal, ini dikarenakan OIDC berjalan diatas protokol OAuth2. Dengan kesamaannya dengan OAuth2, mengapa dibuat standar OIDC?OAuth adalah sebuah protokol untuk memberikan akses kepada seseorang atau yang biasa kita sebut delegasi. Namun dengan hak akses yang diberikan tersebut tidak menjamin bahwa seseorang yang diberikan akses adalah pengguna sebenarnya. OIDC memberikan layer identitas untuk memberikan keabsahan identitas pengguna sehingga bisa divalidasi secara digital. Ilustrasi alur OAuth2 tanpa layer autentikasi yang distandarkan oleh Open IDSebagai contoh dari ilustrasi di atas, Budi memberikan akses kepada Agus untuk masuk sebagai Toni, padahal keduanya bukanlah Toni. Hal ini menyebabkan masalah impersonasi akun. OIDC mendefinisikan ID Token yang memperjelas pengguna yang di autentikasi sebagai berikut:
Berikut adalah contoh isi dari ID Token Payload yang berisi data pengguna yang divalidasi menggunakan JSON Web Key. { Open ID dan keterkaitannya dengan data pengguna..Pertanyaan yang muncul adalah, sesuai terjemahannya: ID Terbuka, apakah artinya informasi pengguna di situs seperti Facebook dan Google menjadi terbuka untuk
situs penyedia layanan yang menerapkan autentikasi Open ID? Jawabannya, spesifikasi Open ID hanya memberikan informasi yang sudah disetujui pengguna ketika menggunakan Open ID, yang disebut dengan
Default
Sebagai pengembang aplikasi, bagaimana saya mengadopsi SSO berbasis OIDC di sisi client aplikasi saya?Untuk memasang OIDC sebagai client, bisa dimulai dengan mempelajari dan menentukan alur OIDC yang sesuai dengan kebutuhan aplikasi yang dibuat. Saya sertakan sumber ke dokumen teknis Open ID berikut: Open ID Connect Specification. Dengan kepopulerannya, OIDC memiliki banyak dukungan sumber pustaka untuk berbagai macam bahasa pemrograman. Pustaka-pustaka yang yang sudah tersertifikasi oleh organisasi Open ID dapat dilihat disini: Certified Relying Party Libraries. Sebagai pengembang aplikasi, bagaimana saya memilih penyedia identitas berbasis Open ID untuk aplikasi saya? Atau apakah lebih baik saya membangun, atau pun membuat aplikasi penyedia identitas sendiri?Pertanyaan di atas dapat dikembalikan dengan kebutuhan. Tentunya untuk mempermudah pengguna umum mengakses aplikasi kita, bisa dipilih penyedia Open ID yang populer seperti Facebook, Google, dan Microsoft. Lain halnya apabila dibutuhkan SSO untuk terautentikasi di suatu “keluarga” aplikasi yang kalian miliki, misalnya : Penyedia layanan X memiliki keluarga aplikasi layanan Y dan Z yang memiliki basis data pengguna berbeda dan fungsi otorisasi yang berbeda, sehingga X akan berlaku sebagai penyedia identitas untuk Y dan Z. Untuk kasus di atas kita bisa mengintegrasikan aplikasi kita dengan penyedia Identitas pihak ketiga seperti penyedia identitas yang penulis sebutkan pada topik SAML di artikel ini. Karena dari pengamatan penulis saat ini penyedia identitas sudah mendukung SAML dan Open ID secara bersamaan. Namun, apabila ingin membuat Open ID Provider sendiri (in house), banyak pustaka sumber terbuka yang bisa kita gunakan sebagai berikut: Certified Open ID Provider Libraries. Dengan fungsinya yang critical, faktor keandalan dan keamanan dari aplikasi penyedia identitas yang dibuat sangat harus dijaga secara optimal. Kesimpulan dari standar SSO berbasis Open IDAkhirnya kita sampai pada kesimpulan setelah menyelami Open ID mulai dari Alur autentikasi, debugging, dan mengimplementasi OIDC pada system stack kita.
Kesimpulan Akhir SAML vs Open IDSetelah kita membahas masing-masing standar dengan cukup objektif dan mendetail, kita bisa membandingkan kedua standar SSO secara apple to apple dan menghayati perbedaan dan persamaannya. Secara simplifikasi kasar penulis, Open ID Connect “memodernisasi” ulang protokol SAML dengan menggunakan basis protokol OAuth2 (JSON format dan token-based signature). Serta dukungan untuk autentikasi pada aplikasi mobile secara native, dan keterbukaannya untuk digunakan oleh pengguna umum. Sedangkan di sisi lain, standar SAML yang ada jauh lebih dulu dianggap sudah proven dan didukung secara luas oleh aplikasi perangkat lunak/ platform berbentuk layanan saat ini (baca: 97% aplikasi SaaS Mendukung SSO Berbasis SAML). Namun bukan berarti ini akan terus bertahan, dengan terus berkembangnya standar Open ID. Bukan tidak mungkin Open ID akan menggeser posisi SAML sebagai standar SSO di organisasi enterprise. Dari sisi Penyedia Identitas, vendor-vendor Penyedia Identitas untuk perusahaan, pada umumnya sudah mendukung standar SSO SAML dan Open ID secara bersamaan, dan memberikan fitur-fitur yang berbeda bagi kebutuhan pengguna. Demikian bahasan kali ini, sampai berjumpa di tulisan penulis berikutnya! P.S. Jika teman-teman menyukai artikel semacam ini, silakan subscribe ke newsletter kita dan dapatkan notifikasi artikel terbaru langsung di inbox kamu! |