golang,go,博客,开源,编程

golang每日一库之volatiletech/authboss

Updated on with 0 views and 0 comments

Authboss 是一个强大且可扩展的 Go 语言认证(authentication)和授权(authorization)框架,适用于 Web 应用程序。它提供了一套完整的用户身份验证方案,包括用户注册、登录、注销、账号恢复、密码重置、OAuth2、双因素认证(2FA)等功能,使开发者能够快速构建安全的身份认证系统。


核心特性

  1. 模块化设计Authboss 由多个独立的模块组成,可按需启用或禁用功能。
  2. 支持多种认证方式
    • 用户名/密码登录
    • OAuth2(Google, Facebook, GitHub 等)
    • 双因素认证(2FA)
  3. 会话管理:支持 Cookie 和 Token 认证,可用于 API 或 Web 应用。
  4. 账号管理
    • 账号注册/注销
    • 电子邮件验证
    • 密码重置
  5. 多数据库支持:适用于各种存储后端(如 MySQL、PostgreSQL、MongoDB)。
  6. 扩展性强:可以自定义存储、用户模型、模板等。

安装

使用 go get 安装 Authboss

go get -u github.com/volatiletech/authboss/v3

基本使用

Authboss 需要进行初始化配置,包括:

  • 用户存储(数据库)
  • 会话管理
  • 视图模板
  • 启用的模块

1. 初始化 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/ 相关的认证请求。

2. 用户存储(数据库)

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() 返回用户的唯一标识(通常是 EmailUsername)。
  • GetPassword() 返回加密后的密码。

3. 自定义存储(数据库)

要存储用户信息,我们需要实现 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)}

4. 启用常见认证功能

4.1 用户注册

用户可以通过 /auth/register 进行注册:

ab.Config.Modules.RegisterPreserveFields = []string{"email"}
ab.Config.Modules.RegisterAfterLoginRedirect = "/dashboard"

效果:

  • 允许用户注册,并存储 email 字段。
  • 注册成功后跳转到 /dashboard

4.2 用户登录

Authboss 默认启用了 /auth/login 端点:

ab.Config.Modules.LoginAfterRegistration = true
ab.Config.Modules.LoginAfterLoginRedirect = "/dashboard"

效果:

  • 允许用户登录,登录成功后跳转到 /dashboard

4.3 密码重置

要启用密码重置功能:

ab.Config.Modules.RecoverLoginAfterRecovery = true
ab.Config.Modules.RecoverRedirectAfter = "/auth/login"
  • 允许用户请求密码重置(邮件发送需要额外配置)。
  • 重置完成后跳转到 /auth/login

5. OAuth2 认证

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 登录。

6. 退出登录

Authboss 提供了 /auth/logout 端点:

mux.Handle("/auth/logout", ab.Config.Core.LogoutHandler)
  • 访问 /auth/logout 即可注销用户。

适用场景

  1. Web 应用认证系统(类似 Django/Auth、Devise)。
  2. 基于 OAuth2 的社交登录(Google、GitHub、Facebook)
  3. 支持 API 认证(JWT、Session)
  4. 需要密码找回、双因素认证的系统

总结

Authboss 是一个强大的 Go 认证框架,提供了完整的用户身份管理方案,适用于 Web 应用的用户认证、OAuth2 社交登录、双因素认证等场景。它的模块化设计让开发者能够按需启用功能,并支持各种存储后端,非常适合构建安全的身份认证系统。


标题:golang每日一库之volatiletech/authboss
作者:mooncakeee
地址:http://blog.dd95828.com/articles/2025/03/16/1742099877566.html
联系:scotttu@163.com