authentication

package
v0.0.5 Latest Latest
Warning

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

Go to latest
Published: Aug 2, 2026 License: MIT Imports: 5 Imported by: 0

Documentation

Overview

Package authentication 提供认证功能支持,用于 enhance 框架。

该模块提供独立的认证抽象层,将认证逻辑与安全授权分离。 参考 Spring Security Authentication 模块的设计理念。

架构设计

  • AuthenticationManager: 认证管理器接口,负责处理认证请求
  • AuthenticationToken: 认证令牌接口,传递认证凭证
  • Authentication: 认证信息接口,包含已认证主体信息
  • AuthenticationProvider: 认证提供者接口,定义认证逻辑

核心功能

  • 令牌认证: 支持用户名/密码等令牌类型
  • 提供者管理: 支持多个认证提供者的链式调用
  • 认证结果: 返回包含权限列表的认证信息

使用方式

创建认证管理器并认证用户:

provider := authentication.NewDaoAuthenticationProvider(userDetailsService, encoder, logger)
manager := authentication.NewProviderManager(provider)
token := authentication.NewUsernamePasswordToken("admin", "password")
result, err := manager.Authenticate(ctx, token)
if err != nil {
    // 认证失败
}
if result.Authenticated() {
    // 认证成功,可以获取权限列表
    authorities := result.Authorities()
}

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrAuthenticationFailed 认证失败。
	ErrAuthenticationFailed = errors.New("authentication failed")
	// ErrBadCredentials 凭证无效。
	ErrBadCredentials = errors.New("bad credentials")
	// ErrUserNotFound 用户未找到。
	ErrUserNotFound = errors.New("user not found")
)

错误定义。

Functions

This section is empty.

Types

type Authentication

type Authentication interface {
	// Principal 获取认证主体的标识,通常是用户名或用户对象。
	Principal() any
	// Credentials 获取凭证信息,如密码或令牌。
	Credentials() any
	// Authorities 返回授权列表,如角色和权限。
	Authorities() []string
	// Authenticated 是否已认证。
	Authenticated() bool
}

Authentication 认证信息接口。

代表一个已认证主体的完整信息,包括身份标识、凭证和权限。 实现应包含用户身份、角色列表和认证状态。

type AuthenticationManager

type AuthenticationManager interface {
	// Authenticate 执行认证。
	Authenticate(ctx context.Context, token AuthenticationToken) (Authentication, error)
}

AuthenticationManager 认证管理器接口。

负责处理认证请求,验证用户凭证并返回认证信息。 通常与多个 AuthenticationProvider 配合使用。

func NewProviderManager

func NewProviderManager(providers ...AuthenticationProvider) AuthenticationManager

NewProviderManager 创建认证提供者管理器。

参数:

  • providers: 认证提供者列表,按顺序尝试认证

返回:

  • AuthenticationManager: 认证管理器接口

type AuthenticationProvider

type AuthenticationProvider interface {
	// Supports 是否支持该令牌类型。
	Supports(token AuthenticationToken) bool
	// Authenticate 执行认证。
	Authenticate(ctx context.Context, token AuthenticationToken) (Authentication, error)
}

AuthenticationProvider 认证提供者接口。

定义认证逻辑,支持特定类型的认证令牌。 每个提供者负责一种认证方式的验证。

func NewAnonymousAuthenticationProvider

func NewAnonymousAuthenticationProvider() AuthenticationProvider

NewAnonymousAuthenticationProvider 创建匿名认证提供者。

匿名提供者为未认证请求自动创建匿名令牌, 通常作为认证链中的最后一个提供者使用。

func NewDaoAuthenticationProvider

func NewDaoAuthenticationProvider(
	userDetailsService UserDetailsService,
	passwordEncoder PasswordEncoder,
	logger log.Logger,
) AuthenticationProvider

NewDaoAuthenticationProvider 创建基于数据源的认证提供者。

参数:

  • userDetailsService: 用户详情服务,用于加载用户信息
  • passwordEncoder: 密码编码器,用于验证密码
  • logger: 日志记录器,可为 nil

返回:

  • AuthenticationProvider: 认证提供者接口

type AuthenticationToken

type AuthenticationToken interface {
	// Principal 获取主体标识,通常是用户名或用户对象。
	Principal() any
	// Credentials 获取凭证信息,如密码或令牌。
	Credentials() any
	// Authenticated 是否已认证。
	Authenticated() bool
}

AuthenticationToken 认证令牌接口。

代表一个认证请求,包含主体标识和凭证信息。 实现应包含用户身份和待验证的凭证。

func NewAnonymousToken

func NewAnonymousToken() AuthenticationToken

NewAnonymousToken 创建匿名认证令牌。

type InMemoryUserDetails

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

InMemoryUserDetails 内存用户详情实现。

存储用户的完整认证和授权信息。

func NewInMemoryUserDetails

func NewInMemoryUserDetails(username, password string, authorities []string) *InMemoryUserDetails

NewInMemoryUserDetails 创建内存用户详情。

默认值: enabled=true, accountNonLocked=true。

func (*InMemoryUserDetails) AccountNonExpired

func (u *InMemoryUserDetails) AccountNonExpired() bool

AccountNonExpired 返回账户是否未过期。

func (*InMemoryUserDetails) AccountNonLocked

func (u *InMemoryUserDetails) AccountNonLocked() bool

AccountNonLocked 返回账户是否未锁定。

func (*InMemoryUserDetails) Authorities

func (u *InMemoryUserDetails) Authorities() []string

Authorities 返回权限列表。

func (*InMemoryUserDetails) CredentialsNonExpired

func (u *InMemoryUserDetails) CredentialsNonExpired() bool

CredentialsNonExpired 返回凭证是否未过期。

func (*InMemoryUserDetails) Enabled

func (u *InMemoryUserDetails) Enabled() bool

Enabled 返回是否启用。

func (*InMemoryUserDetails) Password

func (u *InMemoryUserDetails) Password() string

Password 返回密码。

func (*InMemoryUserDetails) SetAccountNonLocked

func (u *InMemoryUserDetails) SetAccountNonLocked(locked bool)

SetAccountNonLocked 设置锁定状态。

func (*InMemoryUserDetails) SetEnabled

func (u *InMemoryUserDetails) SetEnabled(enabled bool)

SetEnabled 设置启用状态。

func (*InMemoryUserDetails) Username

func (u *InMemoryUserDetails) Username() string

Username 返回用户名。

type InMemoryUserDetailsService

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

InMemoryUserDetailsService 内存用户详情服务。

使用内存 map 存储用户信息,线程安全。 适用场景:开发和测试环境,生产环境应使用数据库实现。

func NewInMemoryUserDetailsService

func NewInMemoryUserDetailsService() *InMemoryUserDetailsService

NewInMemoryUserDetailsService 创建内存用户详情服务。

func (*InMemoryUserDetailsService) CreateUser

func (s *InMemoryUserDetailsService) CreateUser(username, password string, authorities []string)

CreateUser 创建新用户。

func (*InMemoryUserDetailsService) DeleteUser

func (s *InMemoryUserDetailsService) DeleteUser(username string)

DeleteUser 删除用户。

func (*InMemoryUserDetailsService) LoadUserByUsername

func (s *InMemoryUserDetailsService) LoadUserByUsername(_ context.Context, username string) (UserDetails, error)

LoadUserByUsername 根据用户名加载用户。

如果用户不存在返回 ErrUserNotFound。

func (*InMemoryUserDetailsService) UserCount

func (s *InMemoryUserDetailsService) UserCount() int

UserCount 返回用户总数。

type NoOpPasswordEncoder

type NoOpPasswordEncoder struct{}

NoOpPasswordEncoder 不进行编码的密码编码器。

警告:生产环境绝对不要使用此编码器。

func NewNoOpPasswordEncoder

func NewNoOpPasswordEncoder() *NoOpPasswordEncoder

NewNoOpPasswordEncoder 创建 NoOp 密码编码器。

func (*NoOpPasswordEncoder) Encode

func (e *NoOpPasswordEncoder) Encode(rawPassword string) string

Encode 直接返回原始密码。

func (*NoOpPasswordEncoder) Matches

func (e *NoOpPasswordEncoder) Matches(rawPassword, encodedPassword string) bool

Matches 直接比较原始密码和编码后密码。

type PasswordEncoder

type PasswordEncoder interface {
	// Encode 编码密码。
	Encode(rawPassword string) string
	// Matches 验证密码是否匹配。
	Matches(rawPassword, encodedPassword string) bool
}

PasswordEncoder 密码编码器接口。

用于密码的编码和验证。

type ProviderManager

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

ProviderManager 认证提供者管理器。

管理多个 AuthenticationProvider,按顺序尝试认证。 执行流程:遍历所有支持的提供者,返回第一个成功认证的结果。

func (*ProviderManager) AddProvider

func (m *ProviderManager) AddProvider(provider AuthenticationProvider)

AddProvider 向管理器中添加认证提供者。

添加的提供者将按添加顺序参与后续的认证尝试。

func (*ProviderManager) Authenticate

func (m *ProviderManager) Authenticate(ctx context.Context, token AuthenticationToken) (Authentication, error)

Authenticate 尝试通过配置的提供者进行认证。

遍历所有提供者,返回第一个成功认证的结果。

type UserDetails

type UserDetails interface {
	// Username 返回用户名。
	Username() string
	// Password 返回密码。
	Password() string
	// Authorities 返回权限列表。
	Authorities() []string
	// Enabled 账户是否启用。
	Enabled() bool
	// AccountNonExpired 账户是否未过期。
	AccountNonExpired() bool
	// CredentialsNonExpired 凭证是否未过期。
	CredentialsNonExpired() bool
	// AccountNonLocked 账户是否未锁定。
	AccountNonLocked() bool
}

UserDetails 用户详情接口。

包含用户的完整认证和授权信息。 实现应提供用户名、密码、权限列表和账户状态。

type UserDetailsService

type UserDetailsService interface {
	// LoadUserByUsername 根据用户名加载用户详情。
	LoadUserByUsername(ctx context.Context, username string) (UserDetails, error)
}

UserDetailsService 用户详情服务接口。

根据用户名加载用户信息,用于认证。 实现可以从数据库、LDAP、内存等来源加载用户。

type UsernamePasswordToken

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

UsernamePasswordToken 用户名密码认证令牌。

用于基于用户名和密码的认证流程。 认证前包含用户名和密码,认证后包含用户主体和权限列表。

func NewAuthenticatedUsernamePasswordToken

func NewAuthenticatedUsernamePasswordToken(principal any, credentials any, authorities []string) *UsernamePasswordToken

NewAuthenticatedUsernamePasswordToken 创建已认证的用户名密码令牌。

用于认证成功后的令牌,包含用户主体和权限列表。

func NewUsernamePasswordToken

func NewUsernamePasswordToken(principal, credentials any) *UsernamePasswordToken

NewUsernamePasswordToken 创建未认证的用户名密码令牌。

用于认证请求的初始阶段,包含用户名和密码。

func (*UsernamePasswordToken) Authenticated

func (t *UsernamePasswordToken) Authenticated() bool

Authenticated 返回是否已认证。

func (*UsernamePasswordToken) Authorities

func (t *UsernamePasswordToken) Authorities() []string

Authorities 返回权限列表。

func (*UsernamePasswordToken) Credentials

func (t *UsernamePasswordToken) Credentials() any

Credentials 返回凭证信息。

func (*UsernamePasswordToken) Name

func (t *UsernamePasswordToken) Name() string

Name 返回主体名称。

支持 string 和 UserDetails 两种 principal 类型。

func (*UsernamePasswordToken) Principal

func (t *UsernamePasswordToken) Principal() any

Principal 返回主体标识。

func (*UsernamePasswordToken) SetAuthenticated

func (t *UsernamePasswordToken) SetAuthenticated(authenticated bool)

SetAuthenticated 设置认证状态。

func (*UsernamePasswordToken) SetAuthorities

func (t *UsernamePasswordToken) SetAuthorities(authorities []string)

SetAuthorities 设置权限列表。

Jump to

Keyboard shortcuts

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