tips-dan-trik

5 Jenis Authentication digunakan Golang Selain Basic Auth, JWT, dan OAuth

Dalam dunia pemrograman web, otentikasi adalah salah satu elemen penting untuk menjaga keamanan aplikasi. Pada artikel ini, kita akan membahas berbagai metode otentikasi yang dapat digunakan dengan Golang menggunakan library httprouter, selain yang paling populer yaitu Basic Authentication, JWT, dan OAuth. Dengan mengenal berbagai jenis otentikasi ini, Anda bisa memilih yang paling sesuai dengan kebutuhan aplikasi Anda.

Jenis-jenis otentikasi lainnya yang akan dibahas termasuk API key, Session-based Authentication, serta otentikasi menggunakan PKI (Public Key Infrastructure). Setiap jenis otentikasi memiliki kelebihan dan kelemahan yang perlu dipertimbangkan.

1. API Key Authentication

API key adalah salah satu metode otentikasi yang cukup sering digunakan, terutama untuk API yang diakses oleh aplikasi pihak ketiga. Metode ini melibatkan penggunaan sebuah kunci unik yang diberikan kepada pengguna atau aplikasi untuk mengakses layanan. API key biasanya disertakan pada header HTTP atau sebagai query parameter dalam setiap permintaan.

Contoh kode penggunaan API key dengan httprouter:

func apiKeyMiddleware(next httprouter.Handle) httprouter.Handle {
    return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
        apiKey := r.Header.Get("X-API-KEY")
        if apiKey != "your-secret-api-key" {
            http.Error(w, "Forbidden", http.StatusForbidden)
            return
        }
        next(w, r, ps)
    }
}

2. Session-based Authentication

Session-based Authentication adalah metode otentikasi tradisional yang menyimpan informasi otentikasi di sisi server menggunakan session ID. Setelah pengguna login, session ID disimpan dalam cookie dan dikirim dengan setiap permintaan selanjutnya untuk memverifikasi identitas pengguna.

Contoh implementasi otentikasi berbasis session dengan httprouter:

func sessionMiddleware(next httprouter.Handle) httprouter.Handle {
    return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
        sessionID, err := r.Cookie("SESSIONID")
        if err != nil || sessionID.Value == "" {
            http.Redirect(w, r, "/login", http.StatusFound)
            return
        }
        // Cek validitas session dan lanjutkan permintaan
        next(w, r, ps)
    }
}

3. HMAC (Hash-based Message Authentication Code) Authentication

HMAC menggunakan kombinasi antara pesan dan kunci rahasia untuk menghasilkan kode otentikasi yang dapat diverifikasi. HMAC sering digunakan dalam aplikasi yang memerlukan integritas data dan verifikasi otentikasi.

Contoh HMAC dengan httprouter:

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/hex"
)

func hmacMiddleware(next httprouter.Handle) httprouter.Handle {
    return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
        secret := []byte("your-secret-key")
        msg := []byte(r.URL.Path)
        mac := hmac.New(sha256.New, secret)
        mac.Write(msg)
        expectedMAC := hex.EncodeToString(mac.Sum(nil))

        receivedMAC := r.Header.Get("X-HMAC")
        if receivedMAC != expectedMAC {
            http.Error(w, "Forbidden", http.StatusForbidden)
            return
        }

        next(w, r, ps)
    }
}

4. Certificate-based Authentication (SSL/TLS)

Certificate-based Authentication menggunakan sertifikat digital untuk memverifikasi identitas klien atau server. Metode ini banyak digunakan dalam aplikasi yang sangat memerlukan tingkat keamanan tinggi, seperti dalam komunikasi yang terenkripsi menggunakan SSL/TLS.

Dengan menggunakan middleware di httprouter, kita dapat memverifikasi sertifikat klien:

func certAuthMiddleware(next httprouter.Handle) httprouter.Handle {
    return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
        cert := r.TLS.PeerCertificates
        if len(cert) == 0 {
            http.Error(w, "Certificate Required", http.StatusUnauthorized)
            return
        }
        // Verifikasi sertifikat
        next(w, r, ps)
    }
}

5. Custom Token Authentication

Selain menggunakan JWT, Anda bisa menggunakan metode otentikasi berbasis token khusus, di mana token yang digunakan dapat disesuaikan dengan kebutuhan aplikasi Anda. Token ini biasanya akan digenerate menggunakan algoritma tertentu dan disertakan dalam header Authorization permintaan HTTP.

Contoh penggunaan token kustom dengan httprouter:

func customTokenMiddleware(next httprouter.Handle) httprouter.Handle {
    return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
        token := r.Header.Get("X-Custom-Token")
        if token != "your-custom-token" {
            http.Error(w, "Unauthorized", http.StatusUnauthorized)
            return
        }
        next(w, r, ps)
    }
}

Kesimpulan

Di luar Basic Authentication, JWT, dan OAuth, ada berbagai jenis otentikasi lainnya yang bisa Anda pertimbangkan untuk aplikasi Anda di Go menggunakan httprouter. Memahami metode-metode ini membantu Anda memilih solusi otentikasi yang paling sesuai dengan kebutuhan aplikasi dan tingkat keamanan yang diinginkan.

Semoga artikel ini membantu Anda memahami lebih banyak tentang berbagai pilihan otentikasi di Go. Untuk tutorial lainnya, Anda dapat mengunjungi Tutorial Golang.

comments powered by Disqus