Files
Yunling Zhang b3c7f04c2b feat(auth): 管理端新增 AUTH_MODE=builtin|sso,默认 builtin 行为不变
- internal/auth/mode.go:Mode 解析/归一化,X-Auth-User 头常量
- server:adminAuth 按模式鉴权,sso 只认网关注入的 X-Auth-User(缺失 401 JSON)
- 新增公开 /api/admin/mode 供前端识别模式;sso 下 login/logout 返回 404
- main:读取 AUTH_MODE,sso 时跳过自带口令并打印启动提示
- 测试覆盖两种模式、伪造 header 不绕过、数据面不受影响
2026-09-29 13:43:57 +08:00

44 lines
1.2 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package auth
import (
"fmt"
"strings"
)
// HeaderAuthUser 是 SSO 模式下网关注入的已认证用户标识头。
// 只在服务仅监听回环、且由网关经反向代理暴露时才能信任。
const HeaderAuthUser = "X-Auth-User"
// Mode 是管理端的认证模式。
type Mode string
const (
// ModeBuiltin 用 davbox 自带的管理员口令(默认,开箱即用)。
ModeBuiltin Mode = "builtin"
// ModeSSO 关闭自带口令,只信任网关注入的 X-Auth-User。
ModeSSO Mode = "sso"
)
// ParseMode 解析配置值:空串按默认 builtin 处理,其余非法值返回错误。
func ParseMode(v string) (Mode, error) {
switch strings.ToLower(strings.TrimSpace(v)) {
case "", string(ModeBuiltin):
return ModeBuiltin, nil
case string(ModeSSO):
return ModeSSO, nil
default:
return "", fmt.Errorf("AUTH_MODE 取值非法: %q(只支持 builtin 或 sso)", v)
}
}
// Normalize 把零值或非法值收敛为默认的 builtin。
func (m Mode) Normalize() Mode {
if m == ModeBuiltin || m == ModeSSO {
return m
}
return ModeBuiltin
}
// IsSSO 报告当前是否为 SSO 模式。
func (m Mode) IsSSO() bool { return m == ModeSSO }