账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    go jwt生成的字符串token怎样解密
    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
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 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库不存在或版本过旧等问题。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部