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 サイトの他の関連記事を参照してください。