ホームページ >バックエンド開発 >Golang >jwt-go ライブラリを使用して Go 言語で JWT トークンの検証と認証を実装する

jwt-go ライブラリを使用して Go 言語で JWT トークンの検証と認証を実装する

PHPz
PHPzオリジナル
2024-01-22 11:19:551315ブラウズ

在Go语言中使用jwt-go库实现JWT Token鉴权

jwt-go ライブラリを使用して Go 言語で JWT トークン認証を実装します

JWT (JSON Web Token) は軽量の認証および認可方法です。この方法は転送に役立ちます。ユーザーとシステム間の安全で信頼できる情報をJSON形式に基づいて提供します。 JWT トークンを構築するプロセスでは、ペイロードに署名する必要があります。これは、サーバー側でトークンを解析するときに、その正当性を検証できることも意味します。

Go 言語の jwt-go ライブラリを使用して、JWT トークンの認証機能を実装できます。jwt-go ライブラリは、JWT トークンを生成、検証、解析する簡単な方法を提供します。 JWT トークンは、ドットで区切られたヘッダーとペイロードの 2 つの部分で構成されます。

ヘッダーには 2 つの属性 alg (アルゴリズム) と typ (タイプ) が含まれています。アルゴリズムでは HMAC、RSA、またはその他の暗号化アルゴリズムを使用でき、タイプは JWT トークンのタイプを指します。標準 の値は JWT です。

ペイロードにはいくつかの属性もありますが、これらの属性は標準属性ではなく、サーバーとクライアント間の通信に使用されるカスタム属性です。

それでは、具体的な実装プロセスを見ていきましょう。

依存ライブラリのインストール

jwt-go ライブラリの使用を開始する前に、最初にインストールする必要があります。インストールするには、次のコマンドを使用できます:

go get github.com/dgrijalva/jwt-go

Import dependライブラリ

コード内で jwt-go ライブラリをインポートします:

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

JWT トークンの生成

Go 言語で JWT トークンを生成するには、ペイロードに署名する必要があります。では、公開キーと秘密キーのペアを使用する必要があります。公開キーはトークンの正当性を検証するために使用され、秘密キーはトークンの生成に使用されます。秘密キーを構成ファイルまたは環境変数に保存して、セキュリティを確保できます。

次は、JWT トークンを生成する例です:

// 生成JWT Token
func GenerateJwtToken() (string, error) {
    // 加载私钥
    privateKeyByte, err := ioutil.ReadFile("jwtRS256.key")
    if err != nil {
        return "", err
    }
    privateKey, err := jwt.ParseRSAPrivateKeyFromPEM(privateKeyByte)
    if err != nil {
        return "", err
    }
    // 设置Payload
    claims := jwt.MapClaims{
        "username": "admin",
        "exp":      time.Now().Add(time.Hour * 24).Unix(), // 过期时间
    }
    // 生成JWT Token
    token := jwt.NewWithClaims(jwt.SigningMethodRS256, claims)
    tokenString, err := token.SignedString(privateKey)
    if err != nil {
        return "", err
    }
    // 返回生成的Token
    return tokenString, nil
}

上の例では、秘密キーをロードし、ペイロードを設定し、秘密キーの署名を使用して JWT を生成しました。 Token 、そして最後にこの JWT トークンを返します。

JWT トークンの検証

Go 言語で JWT トークンの正当性を検証するには、まずトークンからのペイロードを解析し、次に公開キーを使用してトークンを検証する必要があります。

次は、JWT トークンを検証する例です:

// 验证JWT Token
func ParseJwtToken(tokenString string) (jwt.MapClaims, error) {
    // 加载公钥
    publicKeyByte, err := ioutil.ReadFile("jwtRS256.pem")
    if err != nil {
        return nil, err
    }
    publicKey, err := jwt.ParseRSAPublicKeyFromPEM(publicKeyByte)
    if err != nil {
        return nil, err
    }
    // 解析JWT Token
    token, err := jwt.Parse(tokenString, func(token *jwt.Token) (interface{}, error) {
        _, ok := token.Method.(*jwt.SigningMethodRSA)
        if !ok {
            return nil, fmt.Errorf("unexpected signing method: %v", token.Header["alg"])
        }
        return publicKey, nil
    })
    if err != nil {
        return nil, err
    }
    if claims, ok := token.Claims.(jwt.MapClaims); ok && token.Valid {
        return claims, nil
    }
    return nil, fmt.Errorf("invalid token")
}

上の例では、公開キーをロードし、JWT トークンを解析し、公開キーを使用して JWT を検証しました。トークンの合法性を確認し、最後にペイロードを返します。

概要

jwt-go ライブラリを使用して Go 言語で JWT トークン認証を実装するのは、簡単で効果的な方法です。 JWT トークンは、軽量の認証および認可方法として、サーバーとクライアントの間で情報を安全に転送できます。 jwt-go ライブラリを使用すると、JWT トークンを迅速に生成、検証、解析し、送信プロセス中のセキュリティを確保できます。

以上がjwt-go ライブラリを使用して Go 言語で JWT トークンの検証と認証を実装するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。