Documentation ¶
Index ¶
- Variables
- func GetToken(c *gin.Context) string
- type JWTMiddleware
- func (mw *JWTMiddleware) CheckIfTokenExpire(c *gin.Context) (jwt.MapClaims, error)
- func (mw *JWTMiddleware) GetClaimsFromJWT(c *gin.Context) (MapClaims, error)
- func (mw *JWTMiddleware) Init() error
- func (mw *JWTMiddleware) LoginHandler(c *gin.Context)
- func (mw *JWTMiddleware) LogoutHandler(c *gin.Context)
- func (mw *JWTMiddleware) MiddlewareFunc() gin.HandlerFunc
- func (mw *JWTMiddleware) ParseToken(c *gin.Context) (*jwt.Token, error)
- func (mw *JWTMiddleware) ParseTokenStr(token string) (*jwt.Token, error)
- func (mw *JWTMiddleware) RefreshHandler(c *gin.Context)
- func (mw *JWTMiddleware) RefreshToken(c *gin.Context) (string, time.Time, error)
- func (mw *JWTMiddleware) TokenGenerate(data interface{}) (string, time.Time, error)
- type MapClaims
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 ¶
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 ¶
RefreshToken 刷新token并检查token是否过期
func (*JWTMiddleware) TokenGenerate ¶
func (mw *JWTMiddleware) TokenGenerate(data interface{}) (string, time.Time, error)
TokenGenerator 客户端可以用来获取jwt token的方法。
Click to show internal directories.
Click to hide internal directories.