2023-09-16|閱讀時間 ‧ 約 4 分鐘

Golang - Gin #10: JWT驗證

來源: Gin Logo + 自行用 Canva 製作

來源: Gin Logo + 自行用 Canva 製作


JWT驗證:在Gin中實現JSON Web Token驗證

哈囉!在今天的文章中,我們將深入探討如何在 Gin 應用中實現 JWT 驗證。這種技術允許我們安全地驗證和授權用戶,並確保我們的 API 或 Web 應用的資源僅被許可的用戶訪問。

JWT(JSON Web Token)是一個開放標準,它定義了一種緊湊和獨立的方式,允許各方之間安全地傳輸資訊。由於其自包含特性,它非常適合用於身份驗證和資訊交換。


🛠 在Gin中實現JWT驗證

  1. 生成JWT:首先,我們需要生成一個 JWT,通常在用戶成功登錄後。
    import (
    jwt "github.com/dgrijalva/jwt-go"
    )

    // 簽名密鑰
    var jwtSecret = []byte("secret")

    func generateToken(userID string) string {
    token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
    "userID": userID,
    "exp": time.Now().Add(time.Hour * 72).Unix(),
    })

    tokenString, _ := token.SignedString(jwtSecret)
    return tokenString
    }
  2. 驗證 JWT:接著,我們需要確保只有帶有有效 JWT 的請求才能訪問受保護的端點。
    func authenticate(c *gin.Context) {
    tokenString := c.GetHeader("Authorization")

    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
    return jwtSecret, nil
    })

    if err != nil || !token.Valid {
    c.JSON(http.StatusUnauthorized, gin.H{"error": "unauthorized"})
    c.Abort()
    return
    }

    claims := token.Claims.(jwt.MapClaims)
    userID := claims["userID"].(string)

    c.Set("userID", userID)
    }


📌 常見的挑戰和注意事項

  • Token的保密性:JWT應該始終通過HTTPS傳輸,以防止被竊取。
  • Token的時效性:為JWT設置短暫的過期時間可以增加安全性。


🌟 結論

使用 JWT 驗證是現代 Web 應用中的熱門技術,它提供了一個高效、簡單和安全的方式來管理用戶身份。通過結合 Gin,我們可以輕鬆地在我們的應用中實現這一功能,確保資訊的安全交換。



感謝

謝謝大家看完這篇,如果您喜歡我的文章,歡迎 小額贊助我 ^^
分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.