在python中JWT加密的token, 如何在go中解密

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

}


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注