Takip et

Go (Golang) ile JWT Kimlik Doğrulama: Adım Adım Kılavuz




Go (Golang) ile JWT Kimlik Doğrulama: Adım Adım Kılavuz

Go (Golang) ile JWT Kimlik Doğrulama: Adım Adım Kılavuz

Merhaba! Fatih Soysal olarak, bu yazıda Go programlama dilinde JSON Web Token (JWT) kullanarak güvenli kimlik doğrulama sistemleri nasıl oluşturulacağını adım adım açıklayacağım. JWT, kullanıcı kimlik bilgilerini güvenli bir şekilde iletmek için kullanılan popüler bir standarttır. Bu kılavuz, JWT’nin temellerini anlamaktan başlayarak, Go ile bir JWT tabanlı kimlik doğrulama sistemi oluşturma sürecini detaylı bir şekilde ele alacaktır.

JWT’nin Temelleri

Öncelikle, JWT’nin ne olduğunu ve nasıl çalıştığını anlamak önemlidir. JWT, üç bölümden oluşan bir token’dır: header, payload ve signature. Header, token’ın türünü ve kullanılan algoritmayı tanımlar. Payload, kullanıcı kimliği, kullanıcı adı gibi kullanıcı ile ilgili bilgileri içerir. Son olarak, signature, header ve payload’ın güvenliğini sağlamak için kullanılan dijital bir imzadır. Bu imza, token’ın yetkisiz erişime karşı korunmasını sağlar. Basitçe söylemek gerekirse, JWT, şifrelenmiş bir kimlik kartı gibidir.

Gerekli Kütüphaneler

Go’da JWT ile çalışmak için birkaç kütüphaneye ihtiyacımız var. Bu yazıda, yaygın olarak kullanılan golang-jwt/jwt kütüphanesini kullanacağız. Bu kütüphaneyi, Go projenize aşağıdaki komutla ekleyebilirsiniz:

go get github.com/golang-jwt/jwt/v4

JWT Oluşturma

Şimdi, Go kullanarak bir JWT token’ı nasıl oluşturacağımıza bakalım. Öncelikle, gerekli bilgileri içeren bir yapı (struct) oluşturmamız gerekiyor. Daha sonra, bu yapı kullanılarak JWT token’ı oluşturulabilir. Aşağıdaki kod bloğu, bir JWT token’ı oluşturma örneğini göstermektedir:


import (
    "fmt"
    "time"
    "github.com/golang-jwt/jwt/v4"
)

// MyClaims kendi claim yapımız
type MyClaims struct {
    jwt.RegisteredClaims
    UserID int `json:"user_id"`
    Username string `json:"username"`
}

func GenerateJWT(userID int, username string) (string, error) {
    claims := MyClaims{
        RegisteredClaims: jwt.RegisteredClaims{
            ExpiresAt: jwt.NewNumericDate(time.Now().Add(time.Hour * 24)), // 24 saat sonra sona erecek
            Issuer: "fatihsoysal.com",
        },
        UserID: userID,
        Username: username,
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims) // HS256 algoritmasını kullanıyoruz

    tokenString, err := token.SignedString([]byte("secret_key")) // Secret key'inizi burada değiştirin!

    if err != nil {
        return "", err
    }
    return tokenString, nil
}

func main() {
    token, err := GenerateJWT(1, "fatih")
    if err != nil {
        fmt.Println("Error:", err)
    } else {
        fmt.Println("Token:", token)
    }
}

Bu kodda, secret_key yerine kendi gizli anahtarınızı (secret key) kullanmanız önemlidir. Bu anahtar, token’ın güvenliği için kritik öneme sahiptir. Bu anahtarın güvenliğini sağlamak için güçlü ve rastgele bir anahtar oluşturmanız ve güvenli bir yerde saklamanız gerekmektedir. Üretim ortamlarında, bu anahtarları güvenli bir şekilde yönetmek için bir anahtar yönetim sistemi kullanmanız önerilir.

JWT Doğrulama

Oluşturulan JWT token’ını doğrulamak için aşağıdaki fonksiyon kullanılabilir:


func ValidateJWT(tokenString string) (*MyClaims, error) {
    token, err := jwt.ParseWithClaims(tokenString, &MyClaims{}, func(token *jwt.Token) (interface{}, error) {
        return []byte("secret_key"), nil // secret key
    })

    if err != nil {
        return nil, err
    }

    if claims, ok := token.Claims.(*MyClaims); ok && token.Valid {
        return claims, nil
    } else {
        return nil, fmt.Errorf("invalid token")
    }
}

Bu fonksiyon, gelen token’ı doğrulayarak, geçerli bir token ise, MyClaims yapısını döndürür. Geçersiz bir token ise, hata mesajı döndürür. Yine, burada da secret_key yerine kendi gizli anahtarınızı kullanmalısınız.

Uygulama Örneği

Bu bilgileri kullanarak, bir web uygulaması veya API’de JWT tabanlı kimlik doğrulama sistemi geliştirebilirsiniz. Örneğin, kullanıcı giriş yaptıktan sonra, JWT token’ı oluşturulur ve kullanıcıya verilir. Kullanıcı, sonraki isteklerinde bu token’ı Authorization: Bearer header’ında gönderir. Sunucu, gelen token’ı doğrulayarak kullanıcının kimliğini doğrular ve istekleri işler. Bu süreç, uygulamanızın güvenliğini önemli ölçüde artırır.

Daha detaylı bilgi ve örnekler için fatihsoysal.com adresini ziyaret edebilirsiniz. Ayrıca, Go ile JWT kullanımı hakkında daha fazla bilgi için golang-jwt/jwt GitHub reposu faydalı olacaktır.

JWT Çalışma Şeması

Umarım bu makale, Go ile JWT kimlik doğrulama sistemlerini uygulamanıza yardımcı olmuştur. Herhangi bir sorunuz veya öneriniz varsa, lütfen yorumlarda belirtin!

#Etiketler: Go, Golang, JWT, JSON Web Token, Kimlik Doğrulama, Authentication, Güvenlik, Security, Programlama, Coding, Kütüphane, Library, Adım Adım, Step by Step, Kılavuz, Guide, fatihsoysal.com


Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.