irfo
Moderatör
- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Stateless (Durumsuz) Güvenlik
Modern REST API'lerde sunucu, kullanıcının kim olduğunu RAM'de (Session) tutmaz. Bunun yerine kullanıcıya imzalı bir kimlik kartı verir: JWT. Kullanıcı her istekte bu kartı gösterir.Kütüphane
Go'da standart kütüphane github.com/golang-jwt/jwt/v5'tir.1. Token Oluşturma (Login)
Kod:
package main
import ("fmt""time""github.com/golang-jwt/jwt/v5")
// Gizli Anahtar (Bunu asla kodun içine gömmeyin, Env'den okuyun!)var hmacSampleSecret = []byte("cok_gizli_anahtar")
func TokenOlustur(username string) (string, error) {// Token içine konacak bilgiler (Claims)claims := jwt.MapClaims{"user": username,"exp": time.Now().Add(time.Hour * 1).Unix(), // 1 saat geçerli}
// Token nesnesini oluştur<br>token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)<br><br>// İmzala ve String olarak döndür<br>return token.SignedString(hmacSampleSecret)<br>
}
2. Token Doğrulama (Middleware)
Kod:
func TokenDogrula(tokenString string) (*jwt.Token, error) {return jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {// İmza yöntemi doğru mu? (HMAC mı?)if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {return nil, fmt.Errorf("beklenmeyen imza yöntemi: %v", token.Header["alg"])}return hmacSampleSecret, nil})}
func main() {// TesttokenStr, _ := TokenOlustur("Gopher")fmt.Println("Üretilen Token:", tokenStr)
token, err := TokenDogrula(tokenStr)<br>if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {<br> fmt.Println("Doğrulama Başarılı! Kullanıcı:", claims["user"])<br>} else {<br> fmt.Println("Hata:", err)<br>}<br>
}