HTTP Basic Auth
Go menyediakan package yang dapat digunakan untuk proses HTTP basic authentication.
Metode ini membutuhkan informasi username dan password untuk disisipkan dalam header request (dengan format tertentu) sehingga tidak memerlukan cookies maupun session. Lebih jelasnya silakan baca RFC-7617.
Data username dan password tidak langsung ditampilkan dalam header, namun data tersebut harus di-encode terlebih dahulu ke dalam format yg sudah ditentukan sesuai spesifikasi, sebelum dimasukan ke header.
Berikut adalah contoh penulisan basic auth:
Informasi disisipkan dalam request header dengan key Authorization
dan value adalah Basic
spasi hasil enkripsi dari data username dan password. Data username dan password digabung dengan separator tanda titik dua (:
), lalu di-encode dalam format encoding Base 64.
Golang menyediakan fungsi untuk meng-handle request basic auth dengan cukup mudah, jadi kita tidak perlu untuk memparsing header request terlebih dahulu untuk mendapatkan informasi username dan password.
Studi Kasus
Kita akan membuat web service sederhana untuk memperlihatkan penggunaak http basic authentication.
Setup pada file main.go
main.go
Pada file main.go
, kita akan membuat fungsi main
yang berisi beberapa statement berikut:
Pada fungsi di atas kita mendaftarkan 1 API endpoint /student
yang nantinya kita akan melakukan 2 proses GET
:
GET
/student
dimana akan menampilkan seluruh datastudents
GET
/student?id=1
dimana akan menampilkan data student berdasarkan query stringid
Lalu selanjutnya seperti yang kita lakukan sebelumnya untuk setup port dan server.
Kita akan membuat handler dari ActionStudent
masih di file main.go
yang berisi beberapa statement berikut ini:
Kita bisa lihat pada kode di atas bahwa ada proses pengecekan terlebih dahulu sebelum user dapat mengakses API dari /student
yaitu fungsi !Auth
. Kita juga membuat pengecekan dari !AllowOnlyGET
bahwa hanya method GET
yang bisa diproses pada endpoint ini.
Selanjutnya kita akan membuat fungsi OutputJSON
untuk encode data ke JSON:
Setup pada file student.go
student.go
Pada root directory buatlah 1 file baru bernama student.go
yang masih dalam package main
. Pada file ini kita akan membuat struct
dari data students dan membuat fungsi yaitu GetStudent
dan GetStudentById
untuk nantinya dipanggil di dalam handler yang telah dibuat. Kita juga akan mengisi data secara manual pada fungsi init
Setup pada file middleware.go
middleware.go
Nah inilah tahapan proses authentication. Kita akan membuat 1 file lagi pada root directory bernama middleware.go
.
Pada file ini, kita akan mendeklarasikan secara hardcode untuk data username dan password yang kita anggap telah terdaftar
Selanjutnya kita akan membuat fungsi Auth
untuk proses pengecekan Authentication. Kita menggunakan fungsi bawaan dari package http
yaitu BasicAuth
yang akan melakukan proses decode dari header dan mengembalikan 3 data yaitu username
, password
, dan ok
. ok
akan mengembalikan status apakah request yang dilakukan valid atau tidak.
Jika valid maka kita bisa melakukan pengecekan untuk validasi username
dan password
:
Selanjutnya kita akan membuat fungsi AllowOnlyGET
untuk membatas akses endpoint hanya bisa menggunakan method GET
:
Untuk kode lengkapnya bisa dilihat di bawah ini:
Menjalankan Program
Untuk menjalankan program kita tidak bisa menggunakan go run main.go
karena terdapat beberapa file sebagai package main
. Oleh karena itu kita dapat menjalankan program dengan perintah berikut:
Kita akan mencoba HTTP Authentication Basic dan mengakses API endpoint yang telah kita buat menggunakan Postman:
Jika data authentication salah atau tidak sesuai maka pada postman akan mengembalikan data berikut:
Last updated