最近需要做一个认证功能,由于之前做的认证接口是用python写的,但是现在解密客户端是go, 所以研究了一下如何实现
python使用的库: PyJWT
go使用的库: github.com/dgrijalva/jwt-go
在python中的制作token的代码
import jwt import datetime from django.conf import settings AUTH_EXPIRE = 10*60*60 def gen_token(user_id): return jwt.encode({'user_id': user_id, 'exp': int(datetime.datetime.now().timestamp()) + AUTH_EXPIRE}, settings.SECRET_KEY, 'HS256')
在go中解密token
import ( "xxx/config" "xxx/pkg/e" "time" "github.com/dgrijalva/jwt-go" ) func ParToken(token string) (interface{}, error) { cliams, err := jwt.Parse(token, func(t *jwt.Token) (interface{}, error) { return config.Secert, nil }) if err != nil { return "", err } userinfo, ok := cliams.Claims.(jwt.MapClaims) if !ok && !cliams.Valid { return "", e.ErroToken } expFloat, ok := userinfo["exp"].(float64) if !ok { return "", e.ErroTokenExp } expTimeStamp := int64(expFloat) if time.Now().Unix() > expTimeStamp { return "", e.ErroTokenExpired } return userinfo["profile"], nil }
发表回复