- 56
- 0
加密过程:
// 生成token type Token
token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"uid": "123",
"iat": time.Now().Unix(),
"exp": time.Now().Add(1 * time.Hour * time.Duration(1)).Unix(),
})
// 加密用的签名密钥
signSecret:=[]byte("abcdefg123456")
// 生成给客户端的token
tokenString, _ := token.SignedString(signSecret)
//eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE1NjEyNzg0MDcsImlhdCI6MTU2MTI3NDgwNywiaXNzIjoiR29GdW5jIiwianRpIjoiOTUyNyIsInVpZCI6MSwidXNuIjoieXpoYTUifQ.fVvevhHHRhuUySRjSw-qMG3NEQqSdD9m6m1GBSD5u6o
以上加密后,生成的token字符串怎样解密?
我最终是想取得Claims里的uid的值
- 共 0 条
- 全部回答
-
花语十 普通会员 1楼
在Go语言中,你可以使用第三方库
jwt-go来生成和解密JWT(JSON Web Tokens)令牌。JWT令牌是一种由头部和主体两部分组成的数据,头部包含身份验证信息,主体包含数据。以下是一个简单的示例,展示了如何使用jwt-go生成和解密JWT令牌:首先,确保已经安装了
jwt-go库。如果你还没有安装,你可以使用以下命令进行安装:bash go get github.com/dgrijalva/jwt-go然后,以下是一个生成JWT令牌的示例:
```go package main
import ( "encoding/json" "fmt" "github.com/dgrijalva/jwt-go" "time" )
// GenerateJWT generates a JWT token with a specific expiration time and claims func GenerateJWT(key string, expires time.Duration, claims map[string]interface{}) (string, error) { // Create a new JWT token struct token := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "exp": time.Now().Add(expires), "sub": claims["sub"], "name": claims["name"], "iat": time.Now(), "iss": claims["iss"], })
// Sign the token using the provided key tokenBytes, err := token.SignedString([]byte(key)) if err != nil { return "", err } // Convert the token bytes to a string tokenString := string(tokenBytes) // Decode the token string into a JWT token struct t := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{ "exp": tokenString, "sub": claims["sub"], "name": claims["name"], "iat": time.Now(), "iss": claims["iss"], }) // Verify the token if err := t.verify([]byte(key), []byte(tokenString)); err != nil { return "", err } return tokenString, nil}
func main() { // Generate a JWT token with a specific expiration time and claims token, err := GenerateJWT("your_jwt_secret", time.Hour * 24, map[string]interface{}{ "name": "John Doe", "age": 30, }) if err != nil { fmt.Println(err) return }
// Print the token fmt.Println(token)} ```
在上述示例中,
GenerateJWT函数首先创建了一个新的JWT令牌结构,包含有效期、标识符(sub)、用户名、当前时间戳、标识符的公钥(iss)和一个包含JWT令牌和用户标识(name)的JSON对象。然后,它使用jwt.SigningMethodHS256方法对JWT令牌进行签名,使用time.Now().Add()方法设置令牌的过期时间。接着,它将签名后的JWT令牌字符串转换为一个JSON字符串,并使用jwt.NewWithClaims方法创建一个新的JWT令牌结构,包含过期时间、标识符、用户名、当前时间戳、标识符的公钥和一个包含JWT令牌和用户标识的JSON对象。最后,它使用jwt.Verify方法验证JWT令牌,如果验证通过,则返回令牌的字符串,否则返回一个错误信息。在
main函数中,我们生成了一个JWT令牌,然后打印出令牌的字符串。注意:在实际应用中,你可能需要将
"your_jwt_secret"替换为实际的JWT secret,以及在GenerateJWT函数中修改参数"exp"和"iss",以满足你的JWT Token的过期时间和标识符的设置需求。同时,你还需要确保jwt-go库和你的环境已正确安装,否则可能会出现jwt-go库不存在或版本过旧等问题。
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
