現代の Web 開発では、安全でスケーラブルな認証が非常に重要です。 JSON Web Token (JWT) は、この目標を達成するための標準的な方法となっています。このブログ投稿では、JWT とは何か、JWT がどのように機能するか、Golang で実装する方法について説明します。
JSON Web Token (JWT) は、二者間でクレームを安全に送信するためのコンパクトで URL セーフなクレーム表現方法です。 API や分散システムでユーザーを認証および認可するためによく使用されます。
JWT は、ドット (.) で区切られた 3 つの部分で構成されます。
<code>Header.Payload.Signature</code>
例:
<code>eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.reGQzG3OKdoIMWLDKOZ4TICJit3EW69cQE72E2CfzRE</code>
各部分は次のとおりです:
<code>{ "alg": "HS256", "typ": "JWT" }</code>
<code>{ "sub": "1234567890", "name": "John Doe", "admin": true, "iat": 1516239022 }</code>
署名の作成方法:
- エンコードされたヘッダーとペイロードを接続します:
<code> base64UrlEncode(header) + "." + base64UrlEncode(payload)</code>ログイン後にコピー
- 結果に署名します:
- 秘密鍵または秘密鍵を使用した暗号化署名アルゴリズム (HMACSHA256、RS256 など) を使用します。
- 追加の署名: 最終的な JWT は
になります。<code> header.payload.signature</code>ログイン後にコピー
Golang 開発者は、優れた golang-jwt/jwt ライブラリを活用して JWT を処理できます。このライブラリは、JWT の作成、署名、検証のための強力な機能を提供します。ここで見つけることができます。
ただし、JWT の管理には、署名メソッドの構成、トークンの解析、クレームの検証などの反復的なタスクが必要になることがよくあります。これを簡素化するために、golang-jwt の機能をラップするカスタム パッケージを作成しました。ここで私のパッケージをご覧いただけます。 これは、カスタム JWT パッケージの使用方法の例です。
<code class="language-go">package main import ( "context" "fmt" "log" "time" "github.com/golang-jwt/jwt/v5" jwtutil "github.com/kittipat1413/go-common/util/jwt" ) type MyCustomClaims struct { jwt.RegisteredClaims UserID string `json:"uid"` } func main() { ctx := context.Background() signingKey := []byte("super-secret-key") manager, err := jwtutil.NewJWTManager(jwtutil.HS256, signingKey) if err != nil { log.Fatalf("Failed to create JWTManager: %v", err) } // Prepare custom claims claims := &MyCustomClaims{ RegisteredClaims: jwt.RegisteredClaims{ ExpiresAt: jwt.NewNumericDate(time.Now().Add(15 * time.Minute)), Issuer: "example-HS256", Subject: "example-subject", }, UserID: "abc123", } // Create the token tokenStringHS256, err := manager.CreateToken(ctx, claims) if err != nil { log.Fatalf("Failed to create token: %v", err) } fmt.Println("Generated Token:", tokenStringHS256) // Validate the token parsedClaims := &MyCustomClaims{} err = manager.ParseAndValidateToken(ctx, tokenStringHS256, parsedClaims) if err != nil { log.Fatalf("Failed to validate token: %v", err) } fmt.Printf("Token is valid! UserID: %s, Issuer: %s\n", parsedClaims.UserID, parsedClaims.Issuer) }</code>
JWT は、安全でステートレスな認証のための強力なツールです。署名によりトークンの整合性と信頼性が保証されるため、JWT は API や分散システムに最適です。 jwt-go のようなライブラリを使用すると、Golang プロジェクトに JWT を簡単に実装できます。
私の作品が気に入っていただけましたら、ぜひコーヒーをおごってください!皆様のご支援により、価値のあるコンテンツを作成し、知識を共有し続けることができます。 ☕
以上がGolang の JWT トークン: 安全な API のための開発者ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。