jwt

package module
v0.1.0 Latest Latest
Warning

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

Go to latest
Published: May 2, 2021 License: Apache-2.0 Imports: 8 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrMissingSecretKey 表示需要密钥
	ErrMissingSecretKey = errors.New("需要密钥")

	// ErrForbidden when HTTP status 403 is given
	ErrForbidden = errors.New("您无权访问此资源")

	// ErrMissingAuthFunc indicates Authenticator is required
	ErrMissingAuthFunc = errors.New(" JWTMiddleware.AuthFunc函数未定义!")

	// ErrMissingLoginValues indicates a user tried to authenticate without username or password
	ErrMissingLoginValues = errors.New("缺少用户名或密码")

	// ErrFailedAuthentication indicates authentication failed, could be faulty username or password
	ErrFailedAuthentication = errors.New("用户名或密码错误")

	// ErrFailedTokenCreation indicates JWT Token failed to create, reason unknown
	ErrFailedTokenCreation = errors.New("无法创建JWT Token")

	// ErrExpiredToken indicates JWT token has expired. Can't refresh.
	ErrExpiredToken = errors.New("token已过期")

	// ErrEmptyAuthHeader can be thrown if authing with a HTTP header, the Auth header needs to be set
	ErrEmptyAuthHeader = errors.New("auth标头为空")

	// ErrMissingExpField missing exp field in token
	ErrMissingExpField = errors.New("缺少exp字段")

	// ErrWrongFormatOfExp field must be float64 format
	ErrWrongFormatOfExp = errors.New("exp必须为float64格式")

	// ErrInvalidAuthHeader indicates auth header is invalid, could for example have the wrong Realm name
	ErrInvalidAuthHeader = errors.New("auth标头无效")

	// ErrEmptyQueryToken can be thrown if authing with URL Query, the query token variable is empty
	ErrEmptyQueryToken = errors.New("查询token为空")

	// ErrEmptyCookieToken can be thrown if authing with a cookie, the token cookie is empty
	ErrEmptyCookieToken = errors.New(" Cookie token为空")

	// ErrEmptyParamToken can be thrown if authing with parameter in path, the parameter in path is empty
	ErrEmptyParamToken = errors.New("参数token为空")

	// ErrInvalidSigningAlgorithm indicates signing algorithm is invalid, needs to be HS256, HS384, HS512, RS256, RS384 or RS512
	ErrInvalidSigningAlgorithm = errors.New("无效签名算法")

	// ErrNoPrivateKeyFile indicates that the given private key is unreadable
	ErrNoPrivateKeyFile = errors.New("私钥文件不可读")

	// ErrNoPubKeyFile indicates that the given public key is unreadable
	ErrNoPubKeyFile = errors.New("公钥文件不可读")

	// ErrInvalidPrivateKey indicates that the given private key is invalid
	ErrInvalidPrivateKey = errors.New("私钥无效")

	// ErrInvalidPubKey indicates the the given public key is invalid
	ErrInvalidPubKey = errors.New("公钥无效")

	// IdentityKey default identity key
	IdentityKey = "identity"
)

Functions

func GetToken

func GetToken(c *gin.Context) string

GetToken 帮助获取JWT token字符串

Types

type JWTMiddleware

type JWTMiddleware struct {
	Realm string //显示给用户的名称,(必须参数)

	SigningAlgorithm string //(可选参数)签名算法-可能的值为HS256,HS384,HS512,RS256,RS384或RS512,默认为HS256。

	Key []byte //用于签名的密钥

	Timeout time.Duration //jwt令牌有效的持续时间。可选,默认为一小时。

	//(可选参数)该字段允许客户端刷新令牌,直到MaxRefresh通过。
	//  请注意:客户端可以在MaxRefresh的最后时刻刷新其令牌。
	//  这意味着令牌的最大有效时间跨度为TokenTime + MaxRefresh。
	//  默认为0表示不可刷新。
	MaxRefresh time.Duration

	//(必须参数)基于登录信息执行用户身份验证的回调函数。
	//	必须返回用户数据作为用户标识符,它将存储在Claim Array中。
	AuthFunc func(c *gin.Context) (interface{}, error)

	//(可选参数)回调功能,应执行经过身份验证的用户的授权。仅在身份验证成功后调用。
	//	成功时必须返回true,失败时必须返回false。默认为成功。
	AuthAfter func(data interface{}, c *gin.Context) bool

	//登录期间将调用的回调函数。
	//	使用此功能可以将其他有效负载数据添加到JWT Token
	//	然后在请求期间通过c.Get("JWT_PAYLOAD")使数据可用。
	//	请注意,有效负载未加密。
	//	jwt.io上提到的属性不能用作map的键。
	PayloadFunc func(data interface{}) MapClaims

	//用户可以定义自己的未经授权的功能。
	UnAuthFunc func(*gin.Context, int, string)

	//用户可以定义自己的 LoginResponse 函数。
	LoginResponse func(*gin.Context, int, string, time.Time)

	//用户可以定义自己的 LogoutResponse 函数。
	LogoutResponse func(*gin.Context, int)

	//用户可以定义自己的 RefreshResponse 函数。
	RefreshResponse func(*gin.Context, int, string, time.Time)

	//设置身份处理程序功能
	IdentityHandler func(*gin.Context) interface{}

	// 设置身份密钥
	IdentityKey string

	//(可选参数)是"<source>:<name>"形式的字符串,用于从请求中提取令牌。(默认值"header:Authorization")
	//可选值:
	// - "header:<name>"
	// - "query:<name>"
	// - "cookie:<name>"
	TokenLookup string

	//标头中的字符串。默认值为"Bearer"
	TokenHeadName string

	// TimeFunc 提供当前时间。您可以覆盖它以使用其他时间值。这对于测试或服务器使用不同于令牌的时区很有用。
	TimeFunc func() time.Time

	// 当JWT中间件发生故障时的HTTP状态消息。
	HTTPStatusMsgFunc func(e error, c *gin.Context) string

	// 非对称算法的私钥文件
	PrivateKeyFile string

	//非对称算法的私钥字节
	//	注意:如果同时设置了PrivateKeyFile,则PrivateKeyFile优先于PrivateKeyByte
	PrivateKeyByte []byte

	// 非对称算法的公钥文件
	PubKeyFile string

	// 非对称算法的公钥字节。
	//	注意:如果同时设置了 PubKeyFile,则 PubKeyFile 优先于 PubKeyByte
	PubKeyByte []byte

	// (可选)将Token作为Cookie返回
	SendCookie bool

	// Cookie有效的持续时间。可选,默认情况下等于 Timeout 的值。
	CookieMaxAge time.Duration

	// 允许不安全的Cookie通过HTTP进行开发
	SecureCookie bool

	// 允许访问客户端的Cookie进行开发
	CookieHTTPOnly bool

	// 允许更改Cookie域以进行开发
	CookieDomain string

	// SendAuthorization 允许每个请求的返回授权标头
	SendAuthorization bool

	// 禁用上下文的abort()。
	DisabledAbort bool

	// CookieName 允许更改Cookie名称以进行开发
	CookieName string

	// CookieSameSite 允许使用http.SameSite Cookie参数
	CookieSameSite http.SameSite
	// contains filtered or unexported fields
}

提供了Json-Web-Token身份验证实现。失败时,将返回401 HTTP响应.

成功后,将调用包装的中间件,并以c.Get("userID").(string)的形式提供userID。
用户可以通过将json请求发布到LoginHandler来获得令牌。然后需要在Authentication标头中传递令牌
例如:Authorization:Bearer XXX_TOKEN_XXX

func New

func New(m *JWTMiddleware) (*JWTMiddleware, error)

New for check error with GinJWTMiddleware

func (*JWTMiddleware) CheckIfTokenExpire

func (mw *JWTMiddleware) CheckIfTokenExpire(c *gin.Context) (jwt.MapClaims, error)

CheckIfTokenExpire 检查token是否过期

func (*JWTMiddleware) GetClaimsFromJWT

func (mw *JWTMiddleware) GetClaimsFromJWT(c *gin.Context) (MapClaims, error)

GetClaimsFromJWT get claims from JWT token

func (*JWTMiddleware) Init

func (mw *JWTMiddleware) Init() error

MiddlewareInit initialize jwt configs.

func (*JWTMiddleware) LoginHandler

func (mw *JWTMiddleware) LoginHandler(c *gin.Context)

LoginHandler 可以被客户端用来获取jwt令牌。

	有效负载必须为{"username":"username","password":"password"}形式的json。
 回复的格式为{"token":"token"}。

func (*JWTMiddleware) LogoutHandler

func (mw *JWTMiddleware) LogoutHandler(c *gin.Context)

LogoutHandler 可以被客户端用来删除jwt cookie(如果已设置)

func (*JWTMiddleware) MiddlewareFunc

func (mw *JWTMiddleware) MiddlewareFunc() gin.HandlerFunc

MiddlewareFunc 使 JWTMiddleware 实现 Middleware 接口。

func (*JWTMiddleware) ParseToken

func (mw *JWTMiddleware) ParseToken(c *gin.Context) (*jwt.Token, error)

ParseToken 从 gin.Context 解析jwt令牌

func (*JWTMiddleware) ParseTokenStr

func (mw *JWTMiddleware) ParseTokenStr(token string) (*jwt.Token, error)

ParseTokenString 解析jwt token字符串

func (*JWTMiddleware) RefreshHandler

func (mw *JWTMiddleware) RefreshHandler(c *gin.Context)

RefreshHandler 可用于刷新token。token在刷新时仍然需要有效。

应放置在使用 JWTMiddleware 的端点下。
回复的格式为{"token":"token"}。

func (*JWTMiddleware) RefreshToken

func (mw *JWTMiddleware) RefreshToken(c *gin.Context) (string, time.Time, error)

RefreshToken 刷新token并检查token是否过期

func (*JWTMiddleware) TokenGenerate

func (mw *JWTMiddleware) TokenGenerate(data interface{}) (string, time.Time, error)

TokenGenerator 客户端可以用来获取jwt token的方法。

type MapClaims

type MapClaims map[string]interface{}

使用 map[string]interface {}进行JSON解码,(默认的声明类型)

func ExtractClaims

func ExtractClaims(c *gin.Context) MapClaims

ExtractClaims 帮助提取JWT的Claims

func ExtractClaimsFromToken

func ExtractClaimsFromToken(token *jwt.Token) MapClaims

ExtractClaimsFromToken 帮助从token中提取JWT Claims

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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