golang,go,博客,开源,编程
Authboss
是一个强大且可扩展的 Go 语言认证(authentication)和授权(authorization)框架,适用于 Web 应用程序。它提供了一套完整的用户身份验证方案,包括用户注册、登录、注销、账号恢复、密码重置、OAuth2、双因素认证(2FA)等功能,使开发者能够快速构建安全的身份认证系统。
Authboss
由多个独立的模块组成,可按需启用或禁用功能。使用 go get
安装 Authboss
:
go get -u github.com/volatiletech/authboss/v3
Authboss
需要进行初始化配置,包括:
package main
import (
"fmt"
"log"
"net/http"
"github.com/volatiletech/authboss/v3"
"github.com/volatiletech/authboss-clientstate/v3"
"github.com/volatiletech/authboss-renderer/v3"
)
func main() {
ab := authboss.New()
// 配置会话存储
cookieStoreKey := []byte("your-secret-key")
ab.Config.Storage.Server = authboss.NewMemoryStore() // 使用内存存储
ab.Config.Storage.SessionState = abclientstate.NewSessionState(cookieStoreKey, nil)
ab.Config.Storage.CookieState = abclientstate.NewCookieState(cookieStoreKey, nil)
// 配置模板渲染器
ab.Config.Core.ViewRenderer = abrenderer.NewHTML("./views")
// 启用模块(如注册、登录、密码重置)
ab.Config.Modules.RegisterPreserveFields = []string{"email"}
ab.Config.Modules.RegisterAfterLoginRedirect = "/dashboard"
if err := ab.Init(); err != nil {
log.Fatal(err)
}
// 处理请求
mux := http.NewServeMux()
mux.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Welcome to Authboss example!")
}))
mux.Handle("/auth/", http.StripPrefix("/auth", ab.Router()))
log.Println("Server running on :8080")
http.ListenAndServe(":8080", mux)
}
解析:
Authboss
实例,包括存储、会话管理、模板渲染等。authboss.NewMemoryStore()
作为存储(可替换为数据库存储)。ab.Router()
处理 /auth/
相关的认证请求。Authboss
需要用户模型来存储用户数据,如用户名、密码哈希等。
type User struct {
ID string
Email string
Password string
}
authboss.User
接口func (u User) GetPID() string {
return u.Email
}
func (u User) GetPassword() string {
return u.Password
}
解析:
GetPID()
返回用户的唯一标识(通常是 Email
或 Username
)。GetPassword()
返回加密后的密码。要存储用户信息,我们需要实现 authboss.Storage
接口:
type UserStore struct {
users map[string]User
}
func (s *UserStore) Load(pid string) (authboss.User, error) {
user, ok := s.users[pid]
if !ok {
return nil, authboss.ErrUserNotFound
}
return user, nil
}
func (s *UserStore) Save(user authboss.User) error {
u := user.(User)
s.users[u.Email] = u
return nil
}
解析:
Load(pid string)
通过用户 ID(邮箱)查找用户。Save(user authboss.User)
存储用户信息。然后,在 Authboss
配置中设置:
ab.Config.Storage.Server = &UserStore{users: make(map[string]User)}
用户可以通过 /auth/register
进行注册:
ab.Config.Modules.RegisterPreserveFields = []string{"email"}
ab.Config.Modules.RegisterAfterLoginRedirect = "/dashboard"
效果:
email
字段。/dashboard
。Authboss
默认启用了 /auth/login
端点:
ab.Config.Modules.LoginAfterRegistration = true
ab.Config.Modules.LoginAfterLoginRedirect = "/dashboard"
效果:
/dashboard
。要启用密码重置功能:
ab.Config.Modules.RecoverLoginAfterRecovery = true
ab.Config.Modules.RecoverRedirectAfter = "/auth/login"
/auth/login
。Authboss
还支持 OAuth2 登录,如 Google、GitHub:
ab.Config.Modules.OAuth2Providers = map[string]authboss.OAuth2Provider{
"google": {
AuthURL: "https://accounts.google.com/o/oauth2/auth",
TokenURL: "https://oauth2.googleapis.com/token",
UserURL: "https://www.googleapis.com/oauth2/v2/userinfo",
ClientID: "your-client-id",
ClientSecret: "your-client-secret",
Scopes: []string{"email"},
},
}
OAuth2
提供方,如 Google。/auth/oauth2/google
登录。Authboss
提供了 /auth/logout
端点:
mux.Handle("/auth/logout", ab.Config.Core.LogoutHandler)
/auth/logout
即可注销用户。Authboss
是一个强大的 Go 认证框架,提供了完整的用户身份管理方案,适用于 Web 应用的用户认证、OAuth2 社交登录、双因素认证等场景。它的模块化设计让开发者能够按需启用功能,并支持各种存储后端,非常适合构建安全的身份认证系统。