最近需要做一个认证功能,由于之前做的认证接口是用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
}
发表回复