golang jwt token生成示例
package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/base64"
"encoding/json"
"fmt"
"time"
)
// jwt原始头部信息
type JwtHeaderRaw struct {
Alg string `json:"alg"` // 签名算法
Typ string `json:"typ"` // 类型
}
// jwt原始载荷信息
type JwtPayloadRaw struct {
Iss string `json:"iss"` // 签发者
Sub string `json:"sub"` // 面向的用户
Aud string `json:"aud"` // 接收方
Iat int64 `json:"iat"` // 签发时间
Exp int64 `json:"exp"` // 过期时间
Jti string `json:"jti"` // 唯一身份标识
Roles []string `json:"roles"` // 角色信息
}
// GenSignature 计算signature值的函数
func GenSignature(s string, secret string) (string, error) {
h := hmac.New(sha256.New, []byte(secret))
_, err := h.Write([]byte(s))
if err != nil {
return "", err
}
signatureBytes := h.Sum(nil)
// 对签名进行base64编码
signature := base64.RawURLEncoding.EncodeToString(signatureBytes)
return signature, nil
}
func main() {
// 秘钥--这个要放在服务端的
secret := "test"
// 计算头信息
header := JwtHeaderRaw{
Alg: "HS256",
Typ: "JWT",
}
headerBytes, _ := json.Marshal(header)
headerStr := base64.RawURLEncoding.EncodeToString(headerBytes)
// 计算载荷信息
payload := JwtPayloadRaw{
Iss: "test",