Golang エンジニアリング コンポーネント: 高性能 Web フレームワーク gin のミドルウェア プログラミングと JWT 認証

Golang は高速で効率的なプログラミング言語として、Web アプリケーション開発時のパフォーマンスと効率を向上させることができます。gin は高機能な Web フレームワークであり、そのミドルウェア プログラミングと jwt 認証機能により、開発者はアプリケーションをより便利に開発できます。

1. ミドルウェアプログラミング

gin では、ミドルウェアはインターセプターやフィルターに似た、プラグ可能なモジュール式コンポーネントです。ミドルウェアを利用することで、ロギング、認可検証、電流制限などの機能を実現できます。

  1. ミドルウェアの定義

gin フレームワークでは、ミドルウェアは関数を定義することによって実装されます。

func MyMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        // TODO: 中间件逻辑
    }
}

上記のコードは、MyMiddleware という名前のミドルウェアを定義し、関数タイプを返します。この関数タイプは、HTTP 要求コンテキスト オブジェクトを表すパラメーター c *gin.Context を受け入れます。この関数内には任意のロジックコードを記述することができます。

  1. ミドルウェアの登録

アプリケーションの起動時に、ミドルウェアを対応するルートに登録する必要があります。

r := gin.Default()
r.Use(MyMiddleware())

上記のコードは、MyMiddleware をデフォルト ルートに登録し、ルートを通過するすべての HTTP リクエストがミドルウェアによって処理されることを示します。

2.JWT認証

JWT (Json Web Token) は、軽量の JSON ベースの安全な送信プロトコルであり、通常は ID 認証と情報送信に使用されます。gin フレームワークでは、JWT を使用して ID 認証を実装できます。

  1. JWTの生成

アプリケーションでは、ユーザーの ID 情報を JWT にエンコードしてクライアントに返す必要があります。

func GenerateToken(user *models.User) (string, error) {
    claims := jwt.MapClaims{
        "id":    user.ID,
        "email": user.Email,
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)

    return token.SignedString([]byte("secret"))
}

上記のコードは、GenerateToken 関数を定義し、User タイプのパラメーターを受け入れ、その ID と電子メールをペイロードとして JWT にエンコードします。最後に、HS256 アルゴリズムを使用して署名し、JWT 文字列を返します。

  1. JWT検証

認証が必要なルートでは、HTTP リクエスト ヘッダーの Authorization フィールドを解析して JWT を取得し、それを確認する必要があります。

func AuthMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        authHeader := c.GetHeader("Authorization")
        if len(authHeader) == 0 {
            c.JSON(http.StatusUnauthorized, gin.H{"error": "missing authorization header"})
            c.Abort()
            return
        }

        tokenStr := strings.Replace(authHeader, "Bearer ", "", 1)
        token, err := jwt.Parse(tokenStr, func(token *jwt.Token) (interface{}, error) {
            if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
                return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
            }
            return []byte("secret"), nil
        })

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

        claims, ok := token.Claims.(jwt.MapClaims)
        if !ok {
            c.JSON(http.StatusInternalServerError, gin.H{"error": "invalid token claims"})
            c.Abort()
            return
        }

        userID := int(claims["id"].(float64))
        
        // TODO: 处理逻辑
    }
}

上記のコードは、JWT を検証し、JWT 内のユーザー ID 情報を取得するために使用される AuthMiddleware と呼ばれるミドルウェアを定義します。JWT が無効または期限切れの場合は、対応するエラー メッセージが返されます。

要約:

以上、golangエンジニアリングコンポーネント:高性能Webフレームワークginミドルウェアプログラミングとjwt認証についての3,000ワードの記事でしたので、皆様のお役に立てれば幸いです。Web アプリケーションを開発する場合、ミドルウェアと ID 認証は不可欠な部分であり、開発者がアプリケーションをより便利に開発し、プログラムのセキュリティと安定性を確保することができます。

おすすめ

転載: blog.csdn.net/SMILY12138/article/details/130885140