• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

golang之jwt-go

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

主要针对jwt-go快速生成token。和如何取进行介绍,具体详情还请查看

github.com/dgrijalva/jwt-go

生成token

package main

import (
	"flag"
	"fmt"
	"github.com/dgrijalva/jwt-go"
	"github.com/micro/go-micro/config"
	"time"
)


type Config struct {
	Version string
	Hello   struct {
		Name string
	}
	Etcd struct {
		Addrs    []string
		UserName string
		Password string
	}
}

type User struct {
	Name     string `json:"name"`
	Password string `json:"password"`
	Token    struct {
		AccessToken string `json:"accessToken"`
		ExpiresAt   int64  `json:"expiresAt"`
		Timestamp   int64  `json:"timestamp"`
	}
}

func main()  {

       // 主要解析config.json配置文件,生成token没有用到
	configFile := flag.String("f", "/go-gin-micro/config/config.json", "please use config.json")
	conf := new(Config)
	if err := config.LoadFile(*configFile); err != nil {
		return
	}
	if err := config.Scan(conf); err != nil {
		return
	}
	fmt.Println(conf)
	//md := map[string]string{
	//	"vector": "yang",
	//}
	user := &User{}

	claims := &jwt.StandardClaims{
		ExpiresAt:time.Now().Add(30*time.Second).Unix(), // 过期时间,必须设置
		Issuer:"wang",   // 可不必设置,也可以填充用户名,
	}
	expired := time.Now().Add(148 * time.Hour).Unix()
	token := jwt.NewWithClaims(jwt.SigningMethodHS256,claims) //生成token
	accessToken, err := token.SignedString([]byte("vector.sign"))
	if err != nil {
		return
	}
	user.Token.ExpiresAt = expired
	user.Token.AccessToken = accessToken
	user.Token.Timestamp = time.Now().Unix()

}

 解析token

package main

import (
	"flag"
	"fmt"
	"github.com/dgrijalva/jwt-go"
	"time"
)

func InitC(token string)  {
	authorization := toekn
	token,err := jwt.Parse(authorization, func(token *jwt.Token) (i interface{}, e error) {
		return []byte("vector.sign"),nil
	})
	if err != nil {
                 // 第一种
		//if _, ok := token.Method.(*jwt.SigningMethodHMAC); !ok {
		//	fmt.Println("+++")
		//	return
		//}
		//fmt.Println([]byte("vector.sign"))

                // 第二种
		if err ,ok := err.(*jwt.ValidationError);ok {
			if err.Errors & jwt.ValidationErrorMalformed != 0 {
				return
			}
			if err.Errors & (jwt.ValidationErrorExpired | jwt.ValidationErrorNotValidYet) != 0 {
				fmt.Println(err)
				return
			}
		}
		return
	}
	finToken := token.Claims.(jwt.MapClaims)  // 获取token里面的字段,如生成填入的username
	fmt.Println(finToken["iss"]) 
}

  


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Go 导入当前项目下的包发布时间:2022-07-10
下一篇:
go语言基础之工程管理和工作区介绍发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap