Go 语言 JWT 认证实战 JSON Web Token 在 Go 中的应用

Go阿木 发布于 2025-06-22 7 次阅读


JSON Web Token 在 Go 语言中的应用实战

随着互联网的快速发展,安全性成为了一个至关重要的议题。在 Web 应用中,身份验证是确保安全性的关键环节。JSON Web Token(JWT)是一种轻量级的安全令牌,被广泛应用于各种 Web 应用中。本文将围绕 JWT 在 Go 语言中的应用,通过实战案例,详细介绍 JWT 的生成、验证和使用。

JWT 简介

JWT 是一种开放标准(RFC 7519),用于在各方之间安全地传输信息。它包含三个主要部分:头部(Header)、载荷(Payload)和签名(Signature)。JWT 的结构如下:


Header.PAYLOAD.SIGNATURE


- Header:描述 JWT 的类型和签名算法。

- Payload:包含用户信息,如用户 ID、角色等。

- Signature:使用 Header 中指定的算法对 Header 和 Payload 进行签名,确保 JWT 的完整性和安全性。

Go 语言中使用 JWT

安装 JWT 库

在 Go 语言中,我们可以使用 `github.com/dgrijalva/jwt-go` 库来处理 JWT。需要安装该库:

bash

go get github.com/dgrijalva/jwt-go


生成 JWT

以下是一个生成 JWT 的示例代码:

go

package main

import (


"fmt"


"time"

"github.com/dgrijalva/jwt-go"


)

func main() {


// 创建一个新的 jwt.SigningMethodHS256 实例


signKey := jwt.SigningMethodHS256

// 创建一个 map 来存储用户信息


claims := jwt.MapClaims{


"username": "admin",


"exp": time.Now().Add(time.Hour 1).Unix(), // 设置过期时间为 1 小时


}

// 使用 HS256 算法生成 JWT


token := jwt.NewWithClaims(signKey, claims)

// 获取 JWT 字符串


tokenString, err := token.SignedString([]byte("my_secret_key"))


if err != nil {


fmt.Println("Error:", err)


return


}

fmt.Println("JWT Token:", tokenString)


}


验证 JWT

以下是一个验证 JWT 的示例代码:

```go

package main

import (

"fmt"

"time"

"github.com/dgrijalva/jwt-go"

)

func main() {

// 创建一个 jwt.SigningMethodHS256 实例

signKey := jwt.SigningMethodHS256

// 创建一个 JWT 字符串

tokenString := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwgImV4cCI6MTYxNjQ4MDQyOH0.6JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5JyZ5J