配置
参数
介绍
Key
用于设置签名密钥(必要配置)
KeyFunc
用于设置获取签名密钥的回调函数,设置后 token 解析时将从 KeyFunc
获取 jwt
签名密钥
Timeout
用于设置 token 过期时间,默认为一小时
MaxRefresh
用于设置最大 token 刷新时间,允许客户端在 TokenTime
+ MaxRefresh
内刷新 token 的有效时间,追加一个 Timeout
的时长
Authenticator
用于设置登录时认证用户信息的函数(必要配置)
Authorizator
用于设置授权已认证的用户路由访问权限的函数
PayloadFunc
用于设置登陆成功后为向 token 中添加自定义负载信息的函数
Unauthorized
用于设置 jwt 验证流程失败的响应函数
流程
用户登陆(认证)
注册完成后,服务器需要在用户第一次登陆的时候,验证用户账号和密码,并签发 jwt token。
1 | JwtMiddleware, err = jwt.New(&jwt.HertzJWTMiddleware{ |
Authenticator:用于设置登录时认证用户信息的函数,demo 当中定义了一个
loginStruct
结构接收用户登陆信息,并进行认证有效性。这个函数的返回值users[0]
将为后续生成 jwt token 提供 payload 数据源。PayloadFunc:它的入参就是
Authenticator
的返回值,此时负责解析users[0]
,并将用户名注入 token 的 payload 部分。Key:指定了用于加密 jwt token 的密钥为
"secret key"
。Timeout:指定了 token 有效期为一个小时。
MaxRefresh:用于设置最大 token 刷新时间,允许客户端在
TokenTime
+MaxRefresh
内刷新 token 的有效时间,追加一个Timeout
的时长。
Token 的返回
1 | JwtMiddleware, err = jwt.New(&jwt.HertzJWTMiddleware{ |
- LoginResponse:在登陆成功之后,jwt token 信息会随响应返回,你可以自定义这部分的具体内容,但注意不要改动函数签名,因为它与
LoginHandler
是强绑定的。
Token 的校验
访问配置了 jwt 中间件的路由时,会经过 jwt token 的校验流程。
1 | JwtMiddleware, err = jwt.New(&jwt.HertzJWTMiddleware{ |
TokenLookup:用于设置 token 的获取源,可以选择
header
、query
、cookie
、param
,默认为header:Authorization
,同时存在是以左侧一个读取到的优先。当前 demo 将以header
为数据源,因此在访问/ping
接口时,需要你将 token 信息存放在 HTTP Header 当中。TokenHeadName:用于设置从 header 中获取 token 时的前缀,默认为
"Bearer"
。HTTPStatusMessageFunc:用于设置 jwt 校验流程发生错误时响应所包含的错误信息,你可以自行包装这些内容。
Unauthorized:用于设置 jwt 验证流程失败的响应函数,当前 demo 返回了错误码和错误信息。
用户信息的提取
1 | JwtMiddleware, err = jwt.New(&jwt.HertzJWTMiddleware{ |
- IdentityHandler:用于设置获取身份信息的函数,在 demo 中,此处提取 token 的负载,并配合
IdentityKey
将用户名存入上下文信息。 - IdentityKey:用于设置检索身份的键,默认为
"identity"
。 - Ping:构造响应结果,从上下文信息中取出用户名信息并返回。
参数绑定
hertz 使用开源库 go-tagexpr 进行参数的绑定及验证,demo 中也频繁使用了这个特性。
1 | var loginStruct struct { |