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 ¶
- Variables
- type Authentication
- type AuthenticationManager
- type AuthenticationProvider
- type AuthenticationToken
- type InMemoryUserDetails
- func (u *InMemoryUserDetails) AccountNonExpired() bool
- func (u *InMemoryUserDetails) AccountNonLocked() bool
- func (u *InMemoryUserDetails) Authorities() []string
- func (u *InMemoryUserDetails) CredentialsNonExpired() bool
- func (u *InMemoryUserDetails) Enabled() bool
- func (u *InMemoryUserDetails) Password() string
- func (u *InMemoryUserDetails) SetAccountNonLocked(locked bool)
- func (u *InMemoryUserDetails) SetEnabled(enabled bool)
- func (u *InMemoryUserDetails) Username() string
- type InMemoryUserDetailsService
- func (s *InMemoryUserDetailsService) CreateUser(username, password string, authorities []string)
- func (s *InMemoryUserDetailsService) DeleteUser(username string)
- func (s *InMemoryUserDetailsService) LoadUserByUsername(_ context.Context, username string) (UserDetails, error)
- func (s *InMemoryUserDetailsService) UserCount() int
- type NoOpPasswordEncoder
- type PasswordEncoder
- type ProviderManager
- type UserDetails
- type UserDetailsService
- type UsernamePasswordToken
- func (t *UsernamePasswordToken) Authenticated() bool
- func (t *UsernamePasswordToken) Authorities() []string
- func (t *UsernamePasswordToken) Credentials() any
- func (t *UsernamePasswordToken) Name() string
- func (t *UsernamePasswordToken) Principal() any
- func (t *UsernamePasswordToken) SetAuthenticated(authenticated bool)
- func (t *UsernamePasswordToken) SetAuthorities(authorities []string)
Constants ¶
This section is empty.
Variables ¶
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 认证令牌接口。
代表一个认证请求,包含主体标识和凭证信息。 实现应包含用户身份和待验证的凭证。
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) 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 设置权限列表。