Pengenalan Single Sign-On

Abdurrahman Shofy
JDS Engineering
Published in
5 min readAug 19, 2022

Solusi pengamanan website yang mudah tapi kuat

Ilustrasi. Desain oleh Freepik

Menghafalkan banyak password adalah masalah yang dialami banyak orang. Di zaman ketika hampir semua hal harus dikerjakan melalui internet, umum ditemukan orang yang memiliki akun untuk puluhan bahkan ratusan situs. Dan ketika user harus berganti-ganti aplikasi, user sangat mungkin harus berkali-kali memasukkan username & password. Hal ini tentu sangat memakan waktu. Belum lagi kalau user mengalami salah ketik password atau lupa password.

Selain membuang waktu dan tenaga, memiliki banyak akun situs juga memiliki dampak terkait keamanan komputer. Hal ini terutama berlaku untuk organisasi yang memiliki banyak aplikasi/website untuk kesehariannya.

Misalkan ada perusahaan yang sehari-hari menggunakan lima aplikasi. Saat ada pegawai baru maka bagian IT perusahaan tersebut harus membuat akun di lima aplikasi yang berbeda. Begitu pula saat pegawai tersebut keluar, maka harus dipastikan bahwa akun pegawai tersebut sudah dihapus dari semua sistem yang ada. Masalahnya ketika ada akun yang lupa dihapus, maka pegawai tersebut bisa mengakses data/informasi perusahaan meskipun ia sudah keluar.

Salah satu solusi untuk mengatasi masalah-masalah di atas adalah dengan implementasi sistem Single Sing-On atau yang biasa disingkat menjadi SSO.

Apa itu SSO?

contoh tombol SSO dengan media sosial. sumber: https://www.freecodecamp.org/news/how-to-use-social-login-with-oauth-for-more-secure-apps/

Pernahkah Anda melihat fitur login dengan akun media sosial seperti gambar di atas? Jika pernah berarti Anda sudah pernah menggunakan teknologi single sign-on. Sederhananya single sign-on adalah teknologi yang memungkinkan pengguna untuk mengakses beberapa sistem sekaligus cukup dengan satu kali proses sign-in/log-in.

Walaupun sistem SSO ini sudah ada sejak sebelum zaman internet, namun perkembangan web akhir-akhir ini mengakibatkan banyak website berlomba-lomba menerapkan teknologi yang sangat memudahkan ini. Metode yang dapat digunakan juga banyak. Untuk SSO aplikasi yang sifatnya native (aplikasi yang di-install, bukan berupa website) bisa menggunakan sistem Kerberos atau Integrated Windows Authentication. Untuk website bisa menggunakan protokol SAML atau OpenID Connect (OIDC).

Yang perlu diperhatikan adalah SSO memiliki perbedaan dibandingkan sistem same sign-on atau directory server authentication, seperti yang digunakan oleh protokol LDAP. Di kedua sistem ini user sama-sama hanya memiliki satu password untuk banyak aplikasi. Perbedaannya adalah pada sistem same sign-on, user tetap harus memasukkan password berkali-kali. Selain itu pada sistem same sign-on, aplikasi-aplikasi yang terkoneksi ke server same sign-on memiliki akses ke password yang diinputkan oleh user, sehingga ada peluang penyalahgunaan data password user oleh aplikasi. Ini berbeda dengan sistem single sign-on dimana aplikasi tidak mengetahui password yang digunakan oleh user.

Kelebihan SSO

  1. User tidak perlu hafal banyak password. Karena user hanya butuh satu kali login untuk menggunakan berbagai macam aplikasi, username dan password yang perlu dihafalkan juga menjadi berkurang. Hal ini berbeda dengan sistem tanpa SSO yang umumnya memiliki password yang berbeda untuk setiap sistem.
  2. Meningkatkan keamanan sistem. Karena user hanya perlu menghafalkan sepasang username & password, user bisa membuat password yang lebih kuat dari sebelumnya. Selain itu karena adanya sistem SSO, user juga bisa “dipaksa” untuk menggunakan fitur-fitur keamanan yang lebih canggih seperti penerapan multi factor authentication, dan sejenisnya.
  3. Mempermudah proses onboarding & offboarding. Bagi penggunaan di level organisasi, user bisa didaftarkan cukup sekali untuk bisa menggunakan semua aplikasi internal organisasi. Hal ini tentu menghemat banyak sekali waktu dan tenaga. Selain itu ketika nanti ada anggota organisasi yang keluar, bisa dipastikan user tersebut sudah tidak bisa mengakses aplikasi-aplikasi internal organisasi kalau sudah diterapkan sistem SSO.
  4. Mempercepat development produk. Bagi organisasi yang memiliki banyak aplikasi, dengan menerapkan sistem SSO maka developer tidak perlu memikirkan development fitur-fitur terkait proses register, login, reset password, forgot password, dan sejenisnya. Fitur-fitur tersebut cukup diimplementasikan sekali saja di sistem SSO, sehingga menghemat banyak waktu development yang berharga.

Kekurangan SSO

Walaupun SSO menjadi teknologi yang bisa menjawab banyak sekali permasalah, bukan berarti SSO adalah teknologi yang sempurna. Berikut beberapa kekurangan dari sistem SSO:

  1. Single point of failure. Karena saat ini sistem login terpusat di satu tempat, akibatnya sistem SSO menjadi layanan yang kritikal. Ketika sistem SSO mengalami masalah dan tidak dapat melakukan login, akibatnya semua user tidak bisa login ke semua aplikasi yang bergantung pada SSO. Selain itu ketika username & password salah satu user bocor, maka data tersebut bisa dimanfaatkan untuk masuk ke semua aplikasi yang terhubung.
  2. Implementasi tidak selalu mudah. Hal ini berlaku terutama untuk implementasi SSO secara self-host. Selain isu terkait availability, implementasi SSO secara self-host juga harus memperhatikan aspek keamanan sistem, kenyamanan user, dan seterusnya.

Karena alasan nomor 1 di atas, seharusnya penerapan SSO diikuti dengan penerapan kebijakan otentikasi yang kuat. Contoh kebijakan yang bisa diambil adalah dengan penerapan password policy yang ketat, mewajibkan penggunakan multi factor authentication, dan seterusnya. Insya Allah topik mengenai strong authentication ini akan kita kupas lebih dalam di tulisan yang akan datang.

Cara kerja SSO

Dalam suatu sistem SSO umumnya ada tiga pihak yang terlibat:

  1. User. Pengguna dari sistem yang sudah terdaftar.
  2. Identity Provider (disingkat IdP). Aplikasi yang menyimpan login user. Semua proses login akan terpusat di aplikasi ini. Contoh: Social Login dari Google atau Facebook, atau server mandiri seperti Keycloak atau Auth0.
  3. Service Provider (disingkat SP). Aplikasi yang akan digunakan user. Aplikasi ini nanti akan terhubung ke IdP untuk memastikan apakah user sudah terdaftar di IdP.

Ketika user akan melakukan login ke sebuah Website/Service Provider yang menerapkan sistem SSO, biasanya user akan melalui tahapan berikut:

  1. User mengunjungi Website/Service Provider.
  2. SP memeriksa apakah user sudah pernah login di SP sebelumnya, kalau belum user akan diarahkan (di-redirect) ke halaman login Identity Provider.
  3. IdP memeriksa apakah user sudah login di IdP sebelumnya. Kalau belum user akan diminta login terlebih dahulu. Kalau sudah, IdP akan mengembalikan (redirect) user ke halaman SP kembali dengan kode (token) bahwa user tersebut sudah berhasil login di IdP.
  4. SP akan mencocokkan kembali kode dari IdP. Setelah dipastikan bahwa kode tersebut valid, SP akan memastikan bahwa user sudah login sehingga user bisa mengakses website SP.
Ilustrasi flow SSO dari Auth0. Sumber: https://auth0.com/blog/what-is-and-how-does-single-sign-on-work/

Bagaimana Cara Implementasi SSO?

Saat ini SSO paling umum ditemukan pada aplikas-aplikasi berbentuk website. Jika Anda ingin melakukan implementasi SSO pada website anda, ada dua protokol yang paling populer untuk digunakan. Pertama adalah protokol SAML yang berbasis XML. Ini adalah protokol yang sudah cukup lama, namun populer pada aplikasi-aplikasi berbasis enterprise. Protokol ini cukup powerful dan mencakup banyak use case, namun juga cukup kompleks untuk dipelajari dan di-implementasikan.

Protokol kedua yang bisa dipilih adalah protokol OpenID Connect (OIDC) yang berbasis JSON. Protokol ini lebih baru dan saat ini lebih populer karena lebih simpel dan mudah digunakan. OIDC dirancang khususnya untuk aplikasi berbasis website yang lebih modern. Protokol ini dibangun di atas standar OAuth 2.0 yang sudah lebih dulu populer. Dengan protokol ini, kita bisa membangun SSO dengan memanfaatkan website-website besar sebagai Identity Provider, seperti Google, Facebook, Twitter, Github, dan lain-lain.

Di artikel berikutnya kita akan fokus pada implementasi SSO berbasis protokol OIDC ini. Kita akan melakukan implementasikan SSO dengan Keycloak sebagai Identity Provider serta Laravel sebagai Service Provider.

--

--