JWT(JSON Web Token)是一种轻量级的认证机制,它可以用于身份验证和授权。在JWT中,令牌被加密并使用数字签名进行保护,以确保其完整性和安全性。在本文中,我们将介绍如何在Golang中使用HS、RS. ES、ED签名算法对JWT进行签名和验证。
- HS签名与验证
HS(HMAC-SHA)是一种对称加密算法,它需要一个共享密钥来进行加解密操作。在JWT中,我们可以使用HS256、HS384和HS512三种不同长度的哈希值作为加密算法。
以下是一个简单的例子:
package main
import (
"fmt"
"github.com/dgrijalva/jwt-go"
)
func main() {
// 定义一个共享秘钥
key := []byte("secret")
// 生成JWT令牌
token := jwt.New(jwt.SigningMethodHS256)
claims := token.Claims.(jwt.MapClaims)
claims["sub"] = "1234567890"
claims["name"] = "John Doe"
claims["iat"] = 1516239022
// 对JWT令牌进行签名
signedToken, err := token.SignedString(key)
if err != nil {
fmt.Println(err)
return
}
// 验证JWT令牌的有效性
parsedToken, err := jwt.Parse(signedToken, func(token *jwt.Token)