hweb

package
v0.0.0-...-81a76de Latest Latest
Warning

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

Go to latest
Published: Jan 16, 2024 License: MIT Imports: 12 Imported by: 0

Documentation

Index

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 GetToken

func GetToken(r *ghttp.Request) string

GetToken 帮助获取JWT令牌字符串

func MiddlewareCORS

func MiddlewareCORS(r *ghttp.Request)

MiddlewareCORS 跨域中间件

 示例:
	s.Group("/", func(group *ghttp.RouterGroup) {
		group.Middleware(hweb.MiddlewareCORS)
	})

func MiddlewareErrorHandler

func MiddlewareErrorHandler(r *ghttp.Request)

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 用户可以定义自己的Unauthorized函数。
	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 New

New GfJWTMiddleware检查错误的方法

func (*GfJWTMiddleware) CheckIfTokenExpire

func (mw *GfJWTMiddleware) CheckIfTokenExpire(r *ghttp.Request) (jwt.MapClaims, string, error)

CheckIfTokenExpire 检查令牌是否过期

func (*GfJWTMiddleware) GetClaimsFromJWT

func (mw *GfJWTMiddleware) GetClaimsFromJWT(r *ghttp.Request) (MapClaims, string, error)

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

func (mw *GfJWTMiddleware) RefreshToken(r *ghttp.Request) (string, time.Time, error)

RefreshToken 刷新令牌并检查令牌是否过期

func (*GfJWTMiddleware) TokenGenerator

func (mw *GfJWTMiddleware) TokenGenerator(data interface{}) (string, time.Time, error)

TokenGenerator 客户端可用于获取jwt令牌的方法。

type MapClaims

type MapClaims map[string]interface{}

MapClaims 类型

使用map[string]interface{}进行JSON解码
如果不提供声明(claims)类型,则这是默认的声明(claims)类型

func ExtractClaims

func ExtractClaims(r *ghttp.Request) MapClaims

ExtractClaims 帮助提取JWT声明(claims)

Jump to

Keyboard shortcuts

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