Server aja aku gembok dan aku jaga sepenuh hatiku, apalagi kamu …, #eaaaa…#eaaaa

Suara hati Jomblo

Pendahuluan

IT Security termasuk salah satu cabang ilmu IT yang cukup rumit. Semirip dengan Software Engineering, tingkat kompleksitas kasus nya tinggi dan kritikal. Bukan hanya karena kompleksitas teknis, akan tetapi juga karena kompleksitas yang berhubungan dengan bisnis, regulasi, dan bisa jadi dengan aturan hukum.

Salah satunya yang cukup penting adalah mengenai otorisasi, yaitu hak seorang pengguna untuk mengakses informasi tertentu..

Otorisasi dan Microservices

Seiring berkembangnya microservice di tahun-tahun belakangan ini, maka topik tentang otorisasi juga semakin menarik. Microservice yang dengan kata lain artinya memiliki banyak aplikasi mandiri yang terpisah, tentunya tidak bisa diakses semua orang. Ada pembatasan otorisasi mengenai siapa saja yang boleh dan tidak mengakses informasi atau API dari microservice tersebut. Setiap microservice dibuat berdasarkan kebutuhan bisnis tertentu. Dan oleh sebab itu aksesnya juga harus tertentu.

Sebuah microservice juga bisa saja digunakan oleh banyak aplikasi yang terpisah-pisah. Contohnya sebuah microservice-notification, yaitu microservice yang berkaitan dengan kirim email, sms, otp, panggilan telepon, dll yang dipakai oleh hampir semua aplikasi yang membutuhkan komunikasi formal/bisnis. Akses terhadap sumber daya ini tentunya tidak boleh diakses oleh sembarang orang atau sembarang aplikasi.

Bayangkan ketika sebuah service kita ingin melakukan integrasi dengan aplikasi lain yang berbeda perusahaan. Misalkan aplikasi kita akan melakukan integrasi dengan aplikasi e-commerce atau delivery order. Tentunya mereka akan memberikan kita otorisasi yang terbatas terhadap API apa saja yang boleh diakses terkait dengan integrasi tersebut. Dan tentunya bukan kita saja yang butuh integrasi dengan API mereka. Banyak pihak yang ingin bekerjasama dengan mereka untuk melakukan integrasi API. Dan semuanya itu butuh otorisasi.

Contoh lainnya, ketika kita ingin melakukan sharing sesuatu dari Instagram, Facebook, Tiktok, atau aplikasi sosial media lain yang kita punyai, tetapi dari aplikasi baru tapi bukan Instagram, Facebook, Tiktok, dll, maka aplikasi tersebut butuh diotorisasi juga agar bisa mengakses data-data kita di sosial media tersebut.

Dengan kondisi seperti itu, maka tingkat kerumitan akses otorisasinya akan meningkat. Dan juga makin rumit karena microservices sudah menjadi sumber daya yang harus dilindungi dan diawasi hak aksesnya.

Mengatasi Kerumitan Otorisasi

Mengelola hak akses dengan kondisi banyak aplikasi, banyak service, dan banyak jenis pengguna seperti kasus yang kita jelaskan diatas pasti akan membuat pusing si empunya microservice/sumber daya. Terutama berkaitan dengan akses oleh aplikasi lain selain pemilik microservice/API. Istilahnya akses API oleh aplikasi pihak ketiga.

Banyak solusi untuk hal itu, misalnya adalah membatasi hak akses nya dengan menggunakan cara yang biasa digunakan, yaitu menggunakan username/password setiap mengakses API/microservice.

Tetapi ini tidak efektif dan kurang aman, karena untuk mengakses setiap microservice yang kita punyai harus disertakan username/password. Dan artinya juga aplikasi pihak ketiga yang membutuhkan akses kepada API/microservice kita juga perlu memiliki informasi username/password yang rentan akan disalahgunakan atau dibajak oleh orang lain.

Disinilah muncul masalah yang disebut masalah delegasi otorisasi, yaitu bagaimana sebuah aplikasi pihak ketiga bisa bertindak/melakukan akses secara aman terhadap sebuah sumber daya sebagai delegasi/perwakilan dari pengguna/user.

Akibatnya harus ada cara agar mudah dan aman untuk mengelola hak akses terhadap aplikasi pihak ketiga ini, yaitu dengan cara :

  1. Pemisahan fungsi otorisasi. Daripada sebagian proses otorisasi diserahkan kepada pihak ketiga yang tidak kita percayai kehandalan dan kemampuan dalam menangani security, maka lebih baik dibikin unit terpisah (entah bagian dari service kita atau pihak lain yang benar-benar kita percayai) untuk menanganinya. Kalau service nya merupakan bagian dari pihak aplikasi API/microservice (yang disebut service provider di OAuth1), atau entitas server otorisasi terpisah (yang disebut authorization server di OAuth2). Sesuai dengan konsep Separation Concern , maka semakin modular sebuah fungsi, maka akan semakin mudah dalam desain, deploy, fixing, dan penggunaannya. Dengan pemisahan fungsi otorisasi, maka makin mudah untuk mengelola proses otorisasi yang rumit.

  2. Menghindari penggunaan username/password ketika berkaitan dengan pihak ketiga, dengan tujuan agar username/password ini tidak disalahgunakan.

  3. Sentralisasi pengaturan otorisasi. Semakin rumit sebuah kasus, maka semakin diperlukan cara seragam dalam mengawasi semuanya, termasuk mengatur otorisasi.

Disinilah peran OAuth (Open Authorization) Framework.

Kenapa OAuth ?

OAuth (Open Authorization) adalah sebuah framework untuk otorisasi.

Dari awal memang ditujukan sebagai standar untuk pemberian otorisasi kepada pihak ketiga, jauh sebelum microservice terkenal.

Dan ternyata standar nya ini sepertinya cocok dengan kasus-kasus terkait pemberian akses terhadap banyak aplikasi, banyak jenis pengguna, dan banyak microservice/API.

Akibatnya OAuth ini menjadi terkenal dan dilirik oleh banyak developer aplikasi dan developer API untuk saling integrasi di bagian proses otorisasinya.

Coba kita lihat, bagian sebelumnya yang kita bahas, mengenai bagaimana seharusnya mengelola proses otorisasi kalau melibatkan banyak aplikasi, banyak pengguna, dan banyak API/microservice, yaitu melalui :

  1. Pemisahan fungsi otorisasi di OAuth dengan membagi secara jelas fungsi yang terlibat dalam otorisasi, yaitu pengguna, aplikasi, server otorisasi (di OAuth2), microservice/API/resource server. Penambahan server otorisasi di OAuth2 di kasus ini berupaya menyederhanakan kombinasi yang muncul diantara pengguna, aplikasi, dan microservice/API. Sebelumnya di OAuth1 tidak dipisahkan secara jelas antara server otorisasi dan server/service API/microservice.

  2. Menghindari penggunaan username/password ketika berkaitan dengan pihak ketiga, yaitu dengan menggunakan token atau code tertentu.

  3. Sentralisasi OAuth dalam pengaturan otorisasi aplikasi dan jenis pengguna, yang akan digunakan oleh banyak microservice. Hal ini dilakukan oleh bagian server otorisasi. Di OAuth1 dilakukan oleh service provider/API/microservice. Sementara OAuth2 mensyaratkan adanya server otorisasi yang mengatur registrasi aplikasi dan hak akses pengguna. Hal ini cocok dengan kebutuhan yang kita definsikan diatas.

OAuth (Open Authorization) Framework adalah salah satu cara yang dianggap cukup tepat dalam menangani masalah otorisasi akses yang rumit ini.

OAuth 1 kemudian berkembang menjadi OAuth 2 yang sekarang banyak dipakai di aplikasi-aplikasi.