Documentation ¶
Index ¶
- Variables
- func GetToken(r *ghttp.Request) string
- func MiddlewareCORS(r *ghttp.Request)
- func MiddlewareErrorHandler(r *ghttp.Request)
- type GfJWTMiddleware
- func (mw *GfJWTMiddleware) CheckIfTokenExpire(r *ghttp.Request) (jwt.MapClaims, string, error)
- func (mw *GfJWTMiddleware) GetClaimsFromJWT(r *ghttp.Request) (MapClaims, string, error)
- func (mw *GfJWTMiddleware) LoginHandler(r *ghttp.Request)
- func (mw *GfJWTMiddleware) LogoutHandler(r *ghttp.Request)
- func (mw *GfJWTMiddleware) MiddlewareFunc() ghttp.HandlerFunc
- func (mw *GfJWTMiddleware) MiddlewareInit() error
- func (mw *GfJWTMiddleware) ParseToken(r *ghttp.Request) (*jwt.Token, error)
- func (mw *GfJWTMiddleware) RefreshHandler(r *ghttp.Request)
- func (mw *GfJWTMiddleware) RefreshToken(r *ghttp.Request) (string, time.Time, error)
- func (mw *GfJWTMiddleware) TokenGenerator(data interface{}) (string, time.Time, error)
- type MapClaims
Constants ¶
This section is empty.
Variables ¶
View Source
var ( // ErrMissingSecretKey 表示需要密钥 ErrMissingSecretKey = errors.New("需要密钥") // ErrForbidden 当给出HTTP状态403时 ErrForbidden = errors.New("您没有访问此资源的权限") // ErrMissingAuthenticatorFunc 表示需要验证器 ErrMissingAuthenticatorFunc = errors.New("GfJWTMiddleware.Authenticator函数未定义") // ErrMissingLoginValues 表示试图在没有用户名或密码的情况下进行身份验证的用户 ErrMissingLoginValues = errors.New("缺少用户名或密码") // ErrFailedAuthentication 表示身份验证失败,可能是错误的用户名或密码 ErrFailedAuthentication = errors.New("用户名或密码不正确") // ErrFailedTokenCreation 表示创建JWT令牌失败,原因未知 ErrFailedTokenCreation = errors.New("创建JWT令牌失败") // ErrExpiredToken 表示JWT令牌已过期。不能刷新。 ErrExpiredToken = errors.New("令牌已过期") // ErrInvalidToken 表示JWT令牌无效。不能刷新。 ErrInvalidToken = errors.New("令牌无效") // ErrEmptyAuthHeader 如果使用HTTP请求头进行身份验证,则需要设置身份验证请求头 ErrEmptyAuthHeader = errors.New("认证请求头为空") // ErrMissingExpField 令牌中缺少exp字段 ErrMissingExpField = errors.New("缺少exp字段") // ErrWrongFormatOfExp 字段必须是float64格式 ErrWrongFormatOfExp = errors.New("exp必须是float64格式") // ErrInvalidAuthHeader 表示认证头是无效的,例如可能有错误的域名 ErrInvalidAuthHeader = errors.New("认证请求头无效") // ErrEmptyQueryToken 如果使用URL查询进行身份验证,则查询令牌变量为空 ErrEmptyQueryToken = errors.New("查询令牌为空") // ErrEmptyCookieToken 如果使用cookie进行身份验证,则可以抛出标记cokie为空 ErrEmptyCookieToken = errors.New("cookie令牌为空") // ErrEmptyParamToken 如果使用路径中的参数进行身份验证,则可以抛出路径中的参数为空 ErrEmptyParamToken = errors.New("参数令牌为空") // ErrInvalidSigningAlgorithm 表示签名算法无效,需要 HS256, HS384, HS512, RS256, RS384 或 RS512 ErrInvalidSigningAlgorithm = errors.New("invalid signing algorithm") // ErrNoPrivKeyFile 表示给定的私钥不可读 ErrNoPrivKeyFile = errors.New("私钥文件不可读") // ErrNoPubKeyFile 表示给定的公钥不可读 ErrNoPubKeyFile = errors.New("公钥文件不可读") // ErrInvalidPrivKey 表示给定的私钥无效 ErrInvalidPrivKey = errors.New("私钥无效") // ErrInvalidPubKey 表示给定的公钥无效 ErrInvalidPubKey = errors.New("公钥无效") )
View Source
var (
// IdentityKey 默认身份密钥
IdentityKey = "identity"
)
Functions ¶
func MiddlewareCORS ¶
MiddlewareCORS 跨域中间件
示例: s.Group("/", func(group *ghttp.RouterGroup) { group.Middleware(hweb.MiddlewareCORS) })
func MiddlewareErrorHandler ¶
MiddlewareErrorHandler 全局后置中间件捕获异常
示例: s := g.Server() s.Plugin(&swagger.Swagger{}) s.Use(hweb.MiddlewareErrorHandler)
Types ¶
type GfJWTMiddleware ¶
type GfJWTMiddleware struct { // Realm 要显示给用户的名称。 // 必须的。 Realm string // SigningAlgorithm 签名算法 // 可能的值为 HS256,HS384,HS512 // 可选,默认值为HS256。 SigningAlgorithm string // Key 用于签名的密钥。 // 必需的。 Key []byte // Timeout jwt令牌有效的持续时间。 // 可选,默认为1小时。 Timeout time.Duration // MaxRefresh 此字段允许客户端刷新其令牌,直到MaxRefresh过期。 // 请注意,客户端可以在MaxRefresh的最后一刻刷新其令牌。 // 这意味着令牌的最大有效时间跨度是 TokenTime + MaxRefresh。 // 可选,默认为0表示不可刷新。 MaxRefresh time.Duration // Authenticator 根据登录信息执行用户身份验证的回调函数。 // 必须返回用户数据作为用户标识符,它将存储在声明(Claim)数组中。 // 必需的。 // 检查错误 error(e)以确定适当的错误信息。 Authenticator func(r *ghttp.Request) (interface{}, error) // Authorizator 应该执行已验证用户授权的回调函数。 // 仅在身份验证成功后调用。 // 成功时必须返回true,失败时必须返回false。 // 可选,默认为"成功"。 Authorizator func(data interface{}, r *ghttp.Request) bool // PayloadFunc 将在登录期间调用的回调函数。 // 使用此函数可以向web token添加额外的有效载荷数据。 // 然后在请求期间通过c.Get("JWT_PAYLOAD")获取数据。 // 注意,有效负载没有加密。jwt.io上提到的属性不能用作map的键。 // 可选,默认情况下不会设置其他数据。 PayloadFunc func(data interface{}) MapClaims Unauthorized func(*ghttp.Request, int, string) // LoginResponse 用户可以定义自己的LoginResponse函数。 LoginResponse func(*ghttp.Request, int, string, time.Time) // RefreshResponse 用户可以定义自己的RefreshResponse函数。 RefreshResponse func(*ghttp.Request, int, string, time.Time) // LogoutResponse 用户可以定义自己的LogoutResponse函数。 LogoutResponse func(*ghttp.Request, int) // IdentityHandler 设置身份处理函数 IdentityHandler func(*ghttp.Request) interface{} // IdentityKey 设置身份密钥 IdentityKey string // TokenLookup 是"<source>:<name>"形式的字符串,用于从请求中提取token。 // 可选。默认值 "header:Authorization"。 // 可能值: // - "header:<name>" // - "query:<name>" // - "cookie:<name>" TokenLookup string // TokenHeadName 是请求头中的字符串。 // 默认值是"Bearer" TokenHeadName string // TimeFunc 提供当前时间。 // 可以重写它以使用另一个时间值。 // 如果您的服务器使用的时区与您的令牌不同,这对于测试非常有用。 TimeFunc func() time.Time // HTTPStatusMessageFunc 当JWT中间件中的某些东西发生故障时,使用HTTP状态消息。 // 检查错误 error(e)以确定适当的错误信息。 HTTPStatusMessageFunc func(e error, r *ghttp.Request) string // PrivKeyFile 非对称算法的私钥文件 PrivKeyFile string // PubKeyFile 非对称算法的公钥文件 PubKeyFile string // SendCookie 可以选择将令牌作为cookie返回 SendCookie bool // SecureCookie 允许不安全的Cookie通过HTTP进行开发 SecureCookie bool // CookieHTTPOnly 允许访问客户端的Cookie以进行开发 CookieHTTPOnly bool // CookieDomain 允许更改Cookie域以进行开发 CookieDomain string // SendAuthorization 允许为每个请求返回授权头 SendAuthorization bool // DisabledAbort 禁用上下文的abort()。 DisabledAbort bool // CookieName 允许更改Cookie名称以进行开发 CookieName string // contains filtered or unexported fields }
GfJWTMiddleware 提供Json Web令牌身份验证实现。
失败时,将返回401http响应。 成功时,将调用包装好的中间件,并将userID作为c.Get("userID").(string)提供。 用户可以通过向LoginHandler发送json请求来获取令牌。 然后需要在身份验证头(Authentication header)中传递令牌。 示例:Authorization:Bearer XXX_TOKEN_XXX
func (*GfJWTMiddleware) CheckIfTokenExpire ¶
func (mw *GfJWTMiddleware) CheckIfTokenExpire(r *ghttp.Request) (jwt.MapClaims, string, error)
CheckIfTokenExpire 检查令牌是否过期
func (*GfJWTMiddleware) GetClaimsFromJWT ¶
GetClaimsFromJWT 从JWT令牌获取声明(claims)
func (*GfJWTMiddleware) LoginHandler ¶
func (mw *GfJWTMiddleware) LoginHandler(r *ghttp.Request)
LoginHandler 客户端可以使用它来获取jwt令牌。
有效载荷(Payload)必须为json格式,{"username": "USERNAME", "password": "PASSWORD"}。 响应(Reply)的格式为 {"token": "TOKEN"}。
func (*GfJWTMiddleware) LogoutHandler ¶
func (mw *GfJWTMiddleware) LogoutHandler(r *ghttp.Request)
LogoutHandler 可用于注销令牌。
令牌在注销时仍然需要校验有效性。 注销令牌将未过期的令牌放入黑名单。
func (*GfJWTMiddleware) MiddlewareFunc ¶
func (mw *GfJWTMiddleware) MiddlewareFunc() ghttp.HandlerFunc
MiddlewareFunc 使GfJWTMiddleware实现中间件接口。
func (*GfJWTMiddleware) MiddlewareInit ¶
func (mw *GfJWTMiddleware) MiddlewareInit() error
MiddlewareInit 初始化jwt配置。
func (*GfJWTMiddleware) ParseToken ¶
func (mw *GfJWTMiddleware) ParseToken(r *ghttp.Request) (*jwt.Token, error)
ParseToken 解析jwt令牌
func (*GfJWTMiddleware) RefreshHandler ¶
func (mw *GfJWTMiddleware) RefreshHandler(r *ghttp.Request)
RefreshHandler 可用于刷新令牌。
令牌在刷新时仍然需要校验有效性。 应放在使用GfJWTMiddleware的端点下。 响应(Reply)的格式为{"token": "TOKEN"}。
func (*GfJWTMiddleware) RefreshToken ¶
RefreshToken 刷新令牌并检查令牌是否过期
func (*GfJWTMiddleware) TokenGenerator ¶
func (mw *GfJWTMiddleware) TokenGenerator(data interface{}) (string, time.Time, error)
TokenGenerator 客户端可用于获取jwt令牌的方法。
Click to show internal directories.
Click to hide internal directories.