资讯详情

Golang jwt跨域鉴权

Golang jwt跨域鉴权

JWT全称JSON Web Token是跨域认证解决方案,属于开放标准,规定了一种Token目前,实现模式主要用于前后端分离项目OAuth2.0

安装jwt

go get github.com/dgrijalva/jwt-go 

生成jwt

package main  import (  "errors"  "fmt"  jwt "github.com/dgrijalva/jwt-go"  "time" )  type MyClaims struct { 
          除了脚下的Claims,还需要用户信息  Username string `json:"username"`  Password string `json:"password"`  //jwt中标准的Claims  jwt.StandardClaims }  var key = []byte("secret")  //GenToken 生成token的方法 func GenToken(username string, password string) (string, error) { 
          ///创建我们自己的声明  c := MyClaims{ 
           username, //自定义字段   password,   jwt.StandardClaims{ 
            ExpiresAt: time.Now().Add(time.Hour * 2).Unix(), //过期时间    Issuer:    "Crisp",                              //签发人   },  }     ////使用指定的签名方法创建签名对象  token := jwt.NewWithClaims(jwt.SigningMethodHS256, c) ///在这里使用HS256加密算法  //使用指定的secret签名并获得完整编码后的字符串token  // 注意这个地方,字节切片不能是字符串  return token.SignedString(key) } 

解析jwt

//ParseToken 解析token的方法
func ParseToken(tokenString string) (*MyClaims, error) { 
        
	//解析token
	token, err := jwt.ParseWithClaims(tokenString, &MyClaims{ 
        },
		func(token *jwt.Token) (i interface{ 
        }, err error) { 
        
			return key, nil
		})
	if err != nil { 
        
		return nil, err
	}

	if claims, ok := token.Claims.(*MyClaims); ok && token.Valid { 
         //校验token
		return claims, nil
	}
	return nil, errors.New("invalid token")
}

调用生成token并解析token

func main() { 
        
   //生成token
   token, err := GenToken("Crisp", "12345678")
   if err != nil { 
        
      panic(err)
   }

   //解析token
   parseToken, err := ParseToken(token)
   if err != nil { 
        
      panic(err)
   }
   fmt.Printf("parseToken.UserName: %v\n", parseToken.Username)
   fmt.Printf("parseToken.Password: %v\n", parseToken.Password)
}

代码运行结果

生成的token:eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6IkNyaXNwIiwicGFzc3dvcmQiOiIxMjM0NTY3OCIsImV4cCI6MTY1ODcyNzQxNXNzIjoiQ3Jpc3AifQ.wXUoWlv8VeMJo_ezWSlsEO_XOfcwh3aD4Y_q0YoZfDg
解析token:
解析token获得:parseToken.UserName: Crisp
解析token获得:parseToken.Password: 12345678

标签: 3ad50c晶体管怎样

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台