变化
上古时代的开发方式,都是通过COOKIE来认证。现在是使用JWT header 来认证。
golang中很方便自带的签发jwt的token。最新使用的库是
go get -u github.com/golang-jwt/jwt/v4
注意
很多老人都在使用github.com/dgrijalva/jwt-go
,而这个实际上已经不维护和更新了。
现在都转交给官方去维护了,官方说明 https://github.com/golang-jwt/jwt/blob/main/MIGRATION_GUIDE.md
签发
var (
secKey = "123455" // 签发秘钥
jwt string
err error
)
t := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.RegisteredClaims{
Issuer: "my server",
IssuedAt: jwt.NewNumericDate(time.Now()),
ExpiresAt: jwt.NewNumericDate(time.Now().AddDate(0, 0, 7)),
})
jwt, err = t.SignedString([]byte(secKey))
验证解码
var data jwt.RegisteredClaims
var secKey = "123455" // 密码
token, err := jwt.ParseWithClaims(resp.Jwt, &data, func(token *jwt.Token) (interface{}, error) {
return []byte(secKey), nil
})
fmt.Println("token = ", token, err, data)
当然,秘钥觉得简单,你可以生成RSA的,但过程会很耗时。