Cara mudah JWT Golang

https://www.mchampaneri.in/2017/11/golang-secure-api-with-jwt.html

Sebelum mulai menggunakan JWT (JSON Web Token) lebih baik kita membahas apa hal itu. Banyak artikel yang sudah menjelaskan dengan lebih detail mengenai apa itu JWT, di sini hanya akan dibahas secara singkat mengenai JWT.

JWT yang sudah dijelaskan di atas kepanjangan nya, adalah sebuah token yang berbentuk string yang berisi data yang sudah dipadatkan sehingga hanya terdapat tiga komponen di dalamnya, ketiga komponen tersebut adalah sebagai berikut:

  • sebuah header,

Header pada JWT berisi, jenis dari token yang digunakan, dalam hal ini JWT, dan algoritma enkripsi yang digunakan

  • sebuah klaim atau juga lebih familiar bagi programer dinamakan payload

Payload sudah sangat familiar, menurut saya pribadi, pengertian paling ringan adalah data credensial yang akan ditransmisikan ke bagian lain. Biasa nya terdiri dari user_id atau sejenisnya.

  • signature (kalau diartikan tanda tangan jelek)

Bagian ini terdiri dari secretKey bagi yang menggunakan algoritma HS256, bagian token yang belum diberi tanda (unsigned) dan kemudian unsigned yang sudah di encode sesuai dengan algoritma yang digunakan.

Susunan dari ketiga komponen tersebut dipisahkan dengan tanda . yang pada masing-masing komponen di encode menggunakan base64. Jika di gambarkan dengan rumus akan seperti berikut:

token=encodeBase64Url(header).encodeBase64Url(payload).encodeBase64Url(signature)

Ingin mengetahui lebih detail tentang penjelasan mengenai JWT bisa kalian lihat di artikel ini atau di wikipedia tentang JWT.

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

Di atas adalah penjelasan singkat mengenai apa itu JWT, kemudian selanjutnya adalah tutorial gampang menggunakan JWT pada bahasa pemrograman Golang dan akan digunakan library dari jwt-go karena menurut saya pribadi penggunaannya yang paling gampang. Sebelum memulai, dasar untuk mengikuti tutorial ini adalah membaca artikel saya yang sebelum nya bisa di klik di sini, atau bagi yang sudah paham bisa langsung mengikuti langkah — langkah berikut.

Kalian bisa mulai dengan pembuatan JWT waktu token atau juga bisa mulai dengan authenticate-process dengan JWT parse.

Pembuatan JWT setelah login berhasil, pada tutorial ini tidak saya masukkan payload, but feel free to add payload for yourself, yang pasti nanti akan saya kasih contoh juga untuk pembubuhan payload ke dalam JWT. Berikut code untuk pembuatan JWT.

Pada baris 18 sampai baris 36 hanya sebuah pengecekan username dan password sederhana, akan sangat lebih memangkas panjang baris kode jika menggunakan data dari database. Kemudian pada baris selanjutnya adalah pembuatan token apabila proses autentikasi berhasil. Cara tersebut merupakan cara paling singkat, yang secara dokumentasi bisa kalian lihat pada artikel ini. Jika ingin menambahkan payload kalian membutuhkan baris kode claims := sign.Claims.(jwt.MapClaims) yang kemudian bisa melakukan mapping pada variable claims menggunakan baris kode claims["foo"] = "bar atau menggunakan data kredensial claims["user"] = user.Username diletakkan diantara baris 37 dan 38.

Kemudian untuk proses autentikasi menggunakan middleware sebagai berikut yang diletakkan pada router sebelum pemanggilan RESTApi pada artikel sebelumnya. Sebelum lanjut alakah lebih baik apabila dijelaskan mengenai apa itu Middleware.

Middleware kalau dicari melalui Google akan menghasilkan banyak pengertian, menurut saya middleware itu adalah sebuah jalur yang berguna menghubungkan proses dalam sebuah sistem. Sebagai contoh proses auth pada program ini berguna untuk menyaring agar bisa mendapatkan informasi, dia menghubungkan proses otentikasi dengan proses pemanfaatan data.

Sejujurnya saya sudah melakukan brainstorming untuk mendapatkan penjelasan paling simple dan mudah dimengerti tentang Middleware, namun tetap masih meninggalkan kesan janggal dari pengertian di atas. Jika ingin membaca banyak pengertian Middleware dan menyimpulkan sendiri jawabanmu, bisa kunjungi thread di stackoverflow berikut. Berikut baris kode untuk middleware auth dan penggunaannya pada router.

Pada baris 15 diambil data dari header dengan nama Authorization sebagai data token yang harus disertakan untuk mendapatkan akses ke API. Selain itu adalah cara memverifikasi token yang digunakan.

Kemudian karena itu adalah middleware digunakan pada router untuk pengecekan apakah user memiliki akses atau tidak ke dalam API yang dibuat, maka harus diletakkan di antara routes dan controller yang digunakan. Penggunaan yang seperti file router.go tersebut adalah karena file router dan auth berada pada satu file yang sama sebagai berikut.

Selesai sudah penerapan JWT menggunakan jwt-go dan sangat mudah. Bagi kalian yang ingin melihat baris koding secara keseluruhan bisa kalian clone atau hanya mampir lihat pada github saya disini. Semoga bisa membantu, komen yang membangun sangat saya harapkan untuk mengembangkan pengetahuan saya dan bisa berbagi lebih banyak :)