在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
主要针对jwt-go快速生成token。和如何取进行介绍,具体详情还请查看 github.com/dgrijalva/jwt-go
生成tokenpackage 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() } 解析tokenpackage 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"]) }
|
请发表评论