Help us shape the future of Go! Take the 2026 Go Developer Survey

httpauth

package
v0.1.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 3, 2026 License: Apache-2.0 Imports: 7 Imported by: 0

Documentation

Overview

Package httpauth 提供命名 HTTP 认证方案、统一用户身份和标准 Context 传递。 具体 JWT、Session 或其他凭证的提取、验证和撤销检查由应用实现。

假设 appAuthenticator 和 adminAuthenticator 已实现 Authenticator:

registry := httpauth.NewRegistry()
registry.MustRegister("app", appAuthenticator)
registry.MustRegister("admin", adminAuthenticator)
app, err := registry.Resolve("app")
if err != nil {
	return err
}
principal, err := app.Authenticate(request)
if err != nil {
	return err
}
_ = principal

示例需导入 github.com/bpcoder16/pixiu/biz/httpauth;request 为 *http.Request。 Resolve 首次调用即冻结注册表,应在路由构造前完成所有注册。 Gin 中间件由子包 ginauth 提供,按认证器返回的错误中止请求,成功时将身份注入 Context。 业务通过 PrincipalFromContext 和 SchemeFromContext 读取身份及账号体系。 Principal 按值复制,只有 UserID;角色、权限、登录、签发和刷新留在业务层。 Registry 没有包级默认实例;ginauth 可通过 SetDefault/Default 提供默认 Gin 中间件入口。 不自动尝试多个方案,也不缓存认证结果或持有资源关闭责任。

Index

Constants

This section is empty.

Variables

View Source
var ErrUnauthenticated = errors.New("auth: unauthenticated")

ErrUnauthenticated 表示缺少或无效凭证,支持 errors.Is 判断。

Functions

func BearerToken

func BearerToken(r *http.Request) (string, error)

BearerToken 从唯一的 Authorization Header 提取凭证,不执行验证。 scheme 大小写不敏感;重复头和多余字段均拒绝,不读取查询参数或 Cookie。

func SchemeFromContext

func SchemeFromContext(ctx context.Context) (string, bool)

SchemeFromContext 读取产生当前身份的方案名;没有认证结果时返回 false。

func WithPrincipal

func WithPrincipal(ctx context.Context, scheme string, principal Principal) context.Context

WithPrincipal 写入已验证身份及方案,供适配器或受信任应用代码使用。 本函数不执行认证;调用方保证身份和方案有效。按值复制,不保存可变身份指针。

Types

type Authenticator

type Authenticator interface {
	Authenticate(r *http.Request) (*Principal, error)
}

Authenticator 提取并验证请求凭证,确认身份后才返回 Principal。 成功时须返回非 nil 的已验证身份;UserID 的有效性由实现保证。 实现须支持并发,通过 r.Context() 传递取消和期限;运行错误应保留原始错误链。

type AuthenticatorFunc

type AuthenticatorFunc func(*http.Request) (*Principal, error)

AuthenticatorFunc 将函数适配为认证器。

func (AuthenticatorFunc) Authenticate

func (f AuthenticatorFunc) Authenticate(r *http.Request) (*Principal, error)

type Principal

type Principal struct {
	UserID string
}

Principal 是认证成功后的用户身份;业务结合认证方案解释 UserID 所属的账号体系。

func PrincipalFromContext

func PrincipalFromContext(ctx context.Context) (Principal, bool)

PrincipalFromContext 读取身份副本;没有认证结果时返回 false。

type Registry

type Registry struct {
	// contains filtered or unexported fields
}

Registry 管理命名认证方案,首次 Resolve 后冻结。零值可用,使用后不得复制。 应在注册路由前完成所有 Register;认证器本身由调用方保证并发安全。

func NewRegistry

func NewRegistry() *Registry

func (*Registry) MustRegister

func (r *Registry) MustRegister(name string, authenticator Authenticator)

MustRegister 用于启动阶段,注册失败时 panic。

func (*Registry) Register

func (r *Registry) Register(name string, authenticator Authenticator) error

Register 注册唯一方案名;拒绝空白、首尾空白、nil 实现及冻结后的修改。

func (*Registry) Resolve

func (r *Registry) Resolve(name string) (Authenticator, error)

Resolve 冻结注册表并返回指定实现;未知名字返回错误,不使用其他方案兜底。 HTTP 适配器在构造路由时调用,请求热路径无需访问注册表。

Directories

Path Synopsis
Package ginauth 将命名认证方案接入 Gin,负责身份传递和失败请求的中止。
Package ginauth 将命名认证方案接入 Gin,负责身份传递和失败请求的中止。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL