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 ¶
var ErrUnauthenticated = errors.New("auth: unauthenticated")
ErrUnauthenticated 表示缺少或无效凭证,支持 errors.Is 判断。
Functions ¶
func BearerToken ¶
BearerToken 从唯一的 Authorization Header 提取凭证,不执行验证。 scheme 大小写不敏感;重复头和多余字段均拒绝,不读取查询参数或 Cookie。
func SchemeFromContext ¶
SchemeFromContext 读取产生当前身份的方案名;没有认证结果时返回 false。
Types ¶
type Authenticator ¶
Authenticator 提取并验证请求凭证,确认身份后才返回 Principal。 成功时须返回非 nil 的已验证身份;UserID 的有效性由实现保证。 实现须支持并发,通过 r.Context() 传递取消和期限;运行错误应保留原始错误链。
type AuthenticatorFunc ¶
AuthenticatorFunc 将函数适配为认证器。
func (AuthenticatorFunc) Authenticate ¶
func (f AuthenticatorFunc) Authenticate(r *http.Request) (*Principal, error)
type Principal ¶
type Principal struct {
UserID string
}
Principal 是认证成功后的用户身份;业务结合认证方案解释 UserID 所属的账号体系。
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。