go + jwt + 权限认证

流程

http://blog.fatedier.com/2020/03/28/golang-jwt/

 

1.生成的token长度和jwtCustomClaims(playload)大小相关

2.支持jwt.SigningMethodHS256和jwt.SigningMethodES256,jwt.SigningMethodRS256等加密方法

package main
import(
	"github.com/dgrijalva/jwt-go"
	//"time"
	"reflect"
	"fmt"	
	log "github.com/thinkboy/log4go"
)

type TokenPlayload struct{
	AccountId  string `json:"account_id"` //结构体成员首字母尽量大写,否则在其他包中就无法引用
	Terminal   string `json:"terminal"`
	GroupId    int64  `json:"group"`
}

type jwtCustomClaims struct {
	jwt.StandardClaims
	TokenPlayload	
}

func CreateToken(SecretKey []byte, issuer string, tokenPlayload *TokenPlayload) (tokenString string, err error) {	
	claims := &jwtCustomClaims{
		jwt.StandardClaims{
			//ExpiresAt: int64(time.Now().Add(time.Hour * 72).Unix()),			
			// Issuer:    issuer,
		},
		*tokenPlayload,		
	}	
	log.Info(claims)	
	token := jwt.NewWithClaims(jwt.SigningMethodHS256, claims)
	tokenString, err = token.SignedString(SecretKey)
	return
}

func ParseToken(tokenSrt string, SecretKey []byte) (claims jwt.Claims, err error) {
	var token *jwt.Token
	token, err = jwt.Parse(tokenSrt, func(*jwt.Token) (interface{}, error) {
		return SecretKey, nil
	})
	claims = token.Claims
	return
}

func main(){
	log.Info("test begin")
	SecretKey := "123"
	tokenPlayload := TokenPlayload{	
		"5d5a92150d60a5726471cd3a",	
		"mobile",
		5,
	}
	tokenPlayload.AccountId = "123"
	token, _ := CreateToken([]byte(SecretKey), "YDQ", &tokenPlayload)  
	log.Info(token)
	claims, _ := ParseToken(token, []byte(SecretKey))
	v := reflect.ValueOf(claims)
    if v.Kind() == reflect.Map {
        for _, k := range v.MapKeys() {
			value := v.MapIndex(k)
			key := fmt.Sprintf("%s", k.Interface())				
			strValue := fmt.Sprintf("%v", value.Interface())  //使用%v 兼容value是所有类型,不仅仅是字符串
			log.Info("%s : %s", key, strValue)
        }
    }
	log.Info(claims)
}

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值