jwt

package
v1.1.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 3, 2020 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// Secret 加密密钥
	Secret = "fjskfjls2io3242mn"
	// ExpHours 过期时间
	ExpHours = 12
	// 默认加密方式
	HeaderAlg = "SH256"
	// Biz 业务类型
	Biz = "httpserver"
)

常量定义

Variables

View Source
var (
	// VerifyPass token验证通过
	VerifyPass = &VerifyRes{
		Code:  0,
		Error: "",
	}
	// VerifyFailed token验证失败
	VerifyFailed = &VerifyRes{
		Code:  10000,
		Error: "verification failed",
	}
	// VerifyInvalidToken 无效token
	VerifyInvalidToken = &VerifyRes{
		Code:  20000,
		Error: "invalid token",
	}
	// VerifyInvalidTokenHeader token header无效
	VerifyInvalidTokenHeader = &VerifyRes{
		Code:  20001,
		Error: "invalid token header",
	}
	// VerifyInvalidTokenPayload token payload无效
	VerifyInvalidTokenPayload = &VerifyRes{
		Code:  20002,
		Error: "invalid token payload",
	}
	// VerifyTokenExpire token过期
	VerifyTokenExpire = &VerifyRes{
		Code:  20003,
		Error: "token expire",
	}
	// VerifyInvalidHeaderAlg token 无效加密方式
	VerifyInvalidHeaderAlg = &VerifyRes{
		Code:  20004,
		Error: "invalid token header algorithm",
	}
)

token验证错误定义

Functions

func Build

func Build(uid int64) (string, error)

Build 根据用户id生成AccessToken uid 用户id

func SignatureBuild

func SignatureBuild(token, secret string) string

SignatureBuild 服务密钥SH256加密 当然加密方式有多种 这个服务就只用这一种,如果需要其他的自行拓展一下就可以了 但是注意要和 header.Alg 中定义的加密方式保持一致

Types

type Header struct {
	Typ string `json:"typ"`
	Alg string `json:"alg"`
}

Header jwt的头部承载两部分信息 声明类型,这里是jwt 声明加密的算法 通常直接使用 HMAC SHA256 完整的头部就像下面这样的JSON:

{
  'typ': 'JWT',
  'alg': 'SH256'
}

type Jwt

type Jwt struct {
	Header  Header
	Payload Payload
}

Jwt 结构定义

func (*Jwt) ToJSON

func (jwt *Jwt) ToJSON(secret string) (string, error)

ToJSON 生成最终token字符串

type Payload

type Payload struct {
	Biz  string `json:"biz"`  // 对应标准中的iss 表示业务方
	User int64  `json:"user"` // 对应标准中的aud 表示接收用户
	Exp  int64  `json:"exp"`
	Iat  int64  `json:"iat"`
}

Payload 载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品,这些有效信息包含三个部分 标准中注册的声明 公共的声明 私有的声明 标准中注册的声明 (建议但不强制使用) : iss: jwt签发者 sub: jwt所面向的用户 aud: 接收jwt的一方 exp: jwt的过期时间,这个过期时间必须要大于签发时间 nbf: 定义在什么时间之前,该jwt都是不可用的. iat: jwt的签发时间 jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。 公共的声明 : 公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密. 私有的声明 : 私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。

type Token

type Token struct {
	Token string `json:"token"`
}

Token jwt的第三部分是一个签证信息,这个签证信息由三部分组成: header (base64后的) payload (base64后的) secret 这个部分需要base64加密后的header和base64加密后的payload使用.连接组成的字符串, 然后通过header中声明的加密方式进行加盐secret组合加密,然后就构成了jwt的第三部分。 三个部分用"."拼接成一个完整的字符串,构成了最终的jwt 注意:secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证, 所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。

type VerifyRes

type VerifyRes struct {
	Code  int
	Error string
	Biz   string
	User  int64
}

VerifyRes 验证响应

func Verify

func Verify(token string) *VerifyRes

Verify 验证JWT token AccessToken

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL