Iris 通过它的 [jwt 中间件](https://github.com/iris-contrib/middleware/tree/master/jwt)提供请求身份验证。 在本章中,将学习如何将 JWT 与 Iris 结合使用的基础知识。
1. 通过执行以下 shell 命令来安装它:
```
$ go get github.com/iris-contrib/middleware/jwt
```
2. 要创建新的, 请使用 ` jwt.New` 函数。 本示例通过 `"token"` url 参数提取令牌。经过身份验证的客户端应设计为使用签名令牌进行设置。缺省的 jwt 中间件提取令牌值的行为是通过 `Authentication: Bearer $TOKEN` 标头。
jwt 中间件具有三种验证令牌的方法。
* 第一个是 `Serve` 方法 - 它是一个 `iris.Handler`,
* 第二个是 ` CheckJWT(iris.Context) bool` 和
* 第三个是检索已验证令牌的助手 - ` Get(iris.Context) *jwt.Token`。
3. 要注册它, 你只需在` jwt j.Serve` 中间件之前添加特定的路由组,单个路由或全局路由即可。`app.Get("/secured", j.Serve, myAuthenticatedHandler)`。
4. 在处理程序内生成令牌,该处理程序接受用户有效负载并响应已签名的令牌, 此后稍后可以通过客户端请求标头或url参数发送该令牌,例如 `jwt.NewToken` 或 `jwt.NewTokenWithClaims`。
## 示例
```
import (
"github.com/kataras/iris/v12"
"github.com/iris-contrib/middleware/jwt"
)
func getTokenHandler(ctx iris.Context) {
token := jwt.NewTokenWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
"foo": "bar",
})
// 使用密码签名并获取完整的编码令牌作为字符串
tokenString, _ := token.SignedString([]byte("My Secret"))
ctx.HTML(`Token: ` + tokenString + `<br/><br/>
<a href="/secured?token=` + tokenString + `">/secured?token=` + tokenString + `</a>`)
}
func myAuthenticatedHandler(ctx iris.Context) {
user := ctx.Values().Get("jwt").(*jwt.Token)
ctx.Writef("This is an authenticated request\n")
ctx.Writef("Claim content:\n")
foobar := user.Claims.(jwt.MapClaims)
for key, value := range foobar {
ctx.Writef("%s = %s", key, value)
}
}
func main(){
app := iris.New()
j := jwt.New(jwt.Config{
// 通过 "token" URL参数提取。
Extractor: jwt.FromParameter("token"),
ValidationKeyGetter: func(token *jwt.Token) (interface{}, error) {
return []byte("My Secret"), nil
},
SigningMethod: jwt.SigningMethodHS256,
})
app.Get("/", getTokenHandler)
app.Get("/secured", j.Serve, myAuthenticatedHandler)
app.Run(iris.Addr(":8080"))
}
```
可以将任何有效负载用作 "声明"。