httpauth

package
v0.1.2 Latest Latest
Warning

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

Go to latest
Published: Nov 4, 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