auth

auth 中间件为 Flame 实例提供基于 HTTP Basic 和 Bearer 形式的请求认证服务。

你可以在 GitHubauth - 图1在新窗口打开 上阅读该中间件的源码或通过 pkg.go.devauth - 图2在新窗口打开 查看 API 文档。

下载安装

Go 语言的最低版本要求为 1.16

  1. go get github.com/flamego/auth

用法示例

Basic 认证

auth.Basicauth - 图3在新窗口打开 支持基于一组静态的用户名和密码组合对请求进行认证,并在认证成功后将包含用户名的 auth.Userauth - 图4在新窗口打开 注入到请求上下文中:

  1. package main
  2. import (
  3. "github.com/flamego/auth"
  4. "github.com/flamego/flamego"
  5. )
  6. func main() {
  7. f := flamego.Classic()
  8. f.Use(auth.Basic("username", "secretpassword"))
  9. f.Get("/", func(user auth.User) string {
  10. return "Welcome, " + string(user)
  11. })
  12. f.Run()
  13. }

也可以使用 auth.BasicFuncauth - 图5在新窗口打开 支持基于动态的用户名和密码组合:

  1. package main
  2. import (
  3. "github.com/flamego/auth"
  4. "github.com/flamego/flamego"
  5. )
  6. func main() {
  7. credentials := map[string]string{
  8. "alice": "pa$$word",
  9. "bob": "secretpassword",
  10. }
  11. f := flamego.Classic()
  12. f.Use(auth.BasicFunc(func(username, password string) bool {
  13. return auth.SecureCompare(credentials[username], password)
  14. }))
  15. f.Get("/", func(user auth.User) string {
  16. return "Welcome, " + string(user)
  17. })
  18. f.Run()
  19. }

使用 auth.SecureCompareauth - 图6在新窗口打开 对字符串进行比较可以预防基于时间的对比攻击。

Bearer 认证

auth.Bearerauth - 图7在新窗口打开 支持基于静态令牌对请求进行认证,并在认证成功后将包含令牌的 auth.Tokenauth - 图8在新窗口打开 注入到请求上下文中:

  1. package main
  2. import (
  3. "github.com/flamego/auth"
  4. "github.com/flamego/flamego"
  5. )
  6. func main() {
  7. f := flamego.Classic()
  8. f.Use(auth.Bearer("secrettoken"))
  9. f.Get("/", func(token auth.Token) string {
  10. return "Authenticated through " + string(token)
  11. })
  12. f.Run()
  13. }

也可以使用 auth.BearerFuncauth - 图9在新窗口打开 支持基于动态令牌的认证:

  1. package main
  2. import (
  3. "github.com/flamego/auth"
  4. "github.com/flamego/flamego"
  5. )
  6. func main() {
  7. tokens := map[string]struct{}{
  8. "token": {},
  9. "secrettoken": {},
  10. }
  11. f := flamego.Classic()
  12. f.Use(auth.BearerFunc(func(token string) bool {
  13. _, ok := tokens[token]
  14. return ok
  15. }))
  16. f.Get("/", func(token auth.Token) string {
  17. return "Authenticated through " + string(token)
  18. })
  19. f.Run()
  20. }