auth
auth 中间件为 Flame 实例提供基于 HTTP Basic 和 Bearer 形式的请求认证服务。
你可以在 GitHub在新窗口打开 上阅读该中间件的源码或通过 pkg.go.dev在新窗口打开 查看 API 文档。
下载安装
Go 语言的最低版本要求为 1.16。
go get github.com/flamego/auth
用法示例
Basic 认证
auth.Basic
在新窗口打开 支持基于一组静态的用户名和密码组合对请求进行认证,并在认证成功后将包含用户名的 auth.User
在新窗口打开 注入到请求上下文中:
package main
import (
"github.com/flamego/auth"
"github.com/flamego/flamego"
)
func main() {
f := flamego.Classic()
f.Use(auth.Basic("username", "secretpassword"))
f.Get("/", func(user auth.User) string {
return "Welcome, " + string(user)
})
f.Run()
}
也可以使用 auth.BasicFunc
在新窗口打开 支持基于动态的用户名和密码组合:
package main
import (
"github.com/flamego/auth"
"github.com/flamego/flamego"
)
func main() {
credentials := map[string]string{
"alice": "pa$$word",
"bob": "secretpassword",
}
f := flamego.Classic()
f.Use(auth.BasicFunc(func(username, password string) bool {
return auth.SecureCompare(credentials[username], password)
}))
f.Get("/", func(user auth.User) string {
return "Welcome, " + string(user)
})
f.Run()
}
使用 auth.SecureCompare
在新窗口打开 对字符串进行比较可以预防基于时间的对比攻击。
Bearer 认证
auth.Bearer
在新窗口打开 支持基于静态令牌对请求进行认证,并在认证成功后将包含令牌的 auth.Token
在新窗口打开 注入到请求上下文中:
package main
import (
"github.com/flamego/auth"
"github.com/flamego/flamego"
)
func main() {
f := flamego.Classic()
f.Use(auth.Bearer("secrettoken"))
f.Get("/", func(token auth.Token) string {
return "Authenticated through " + string(token)
})
f.Run()
}
也可以使用 auth.BearerFunc
在新窗口打开 支持基于动态令牌的认证:
package main
import (
"github.com/flamego/auth"
"github.com/flamego/flamego"
)
func main() {
tokens := map[string]struct{}{
"token": {},
"secrettoken": {},
}
f := flamego.Classic()
f.Use(auth.BearerFunc(func(token string) bool {
_, ok := tokens[token]
return ok
}))
f.Get("/", func(token auth.Token) string {
return "Authenticated through " + string(token)
})
f.Run()
}