jwtのローカル検証方法はどのように実行するか?

Go言語を使用してJWT(JSON Web Token)のローカル検証を実装するには、以下の手順に従うことができます:

  1. 最初に、github.com/dgrijalva/jwt-goライブラリをインストールしてインポートする必要があります。以下のコマンドを使用してインストールできます:
go get github.com/dgrijalva/jwt-go
  1. コードで必要なパッケージをインポートする。
import (
    "github.com/dgrijalva/jwt-go"
)
  1. JWTのペイロード(有効な情報)を表す構造体を定義します。
type Claims struct {
    Username string `json:"username"`
    jwt.StandardClaims
}

JWTの標準フィールド(有効期限など)を含むために、jwt.StandardClaimsが使用されています。

  1. 秘密の鍵 (ひみつのかぎ)
var secretKey = []byte("your-secret-key")
  1. JWTを生成するための関数を作成します。以下はJWTを生成する例の関数です:
func GenerateJWT(username string) (string, error) {
    claims := &Claims{
        Username: username,
        StandardClaims: jwt.StandardClaims{
            ExpiresAt: time.Now().Add(time.Hour * 24).Unix(), // 设置过期时间为24小时
        },
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    signedToken, err := token.SignedString(secretKey)
    if err != nil {
        return "", err
    }

    return signedToken, nil
}

この例では、jwt.NewWithClaimsを使用してJWTを作成し、SigningMethodHS256を指定して署名アルゴリズムを設定しました。その後、token.SignedStringメソッドを使用してJWTに署名し、署名されたJWT文字列を返しました。

  1. JWTを検証するための関数を作成します。以下はJWTを検証する例の関数です:
func ValidateJWT(tokenString string) (*Claims, error) {
    claims := &Claims{}

    token, err := jwt.ParseWithClaims(tokenString, claims, func(token *jwt.Token) (interface{}, error) {
        return secretKey, nil
    })
    if err != nil {
        return nil, err
    }

    if !token.Valid {
        return nil, errors.New("invalid token")
    }

    return claims, nil
}

この例では、jwt.ParseWithClaimsメソッドを使用してJWTを解析し、解析されたClaimsをclaims変数に保存します。その後、同じキーを使用してJWTの署名が有効かどうかを検証します。検証に合格した場合は、解析されたClaimsを返します。そうでなければ、エラーを返します。

  1. 現在、定義された関数を使用してJWTを生成および検証することができます。以下は完全な例です:
package main

import (
    "fmt"
    "github.com/dgrijalva/jwt-go"
    "time"
)

type Claims struct {
    Username string `json:"username"`
    jwt.StandardClaims
}

var secretKey = []byte("your-secret-key")

func main() {
    username := "john.doe"
    token, err := GenerateJWT(username)
    if err != nil {
        fmt.Println("Error generating JWT:", err)
        return
    }

    fmt.Println("JWT:", token)

    claims, err := ValidateJWT(token)
    if err != nil {
        fmt.Println("Error validating JWT:", err)
        return
    }

    fmt.Println("Valid token for user:", claims.Username)
}

func GenerateJWT(username string) (string, error) {
    claims := &Claims{
        Username: username,
        StandardClaims: jwt.StandardClaims{
            ExpiresAt: time.Now().Add(time.Hour * 24).Unix(),
        },
    }

    token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
    signedToken, err := token.SignedString(secretKey)
    if err != nil {
        return "", err
    }

    return signedToken, nil
}

func ValidateJWT(tokenString string) (*Claims, error) {
    claims := &Claims{}

    token, err := jwt.ParseWithClaims(tokenString, claims, func(token *jwt.Token) (interface{}, error) {
        return secretKey, nil
    })
    if err != nil {
        return nil, err
    }

    if !token.Valid {
        return nil, errors.New("invalid token")
    }

    return claims, nil
}

この例では、私たちは

bannerAds