登录鉴权与账号管理
authsvr 通过 AuthsvrClientService 处理登录鉴权。登录记录以 (account_type, open_id) 为复合键;
渠道标识属于账号键的一部分,不能用同一 open_id 复用其他渠道的记录。
内部账号
internal_auth.enable 开启内部账号,internal_auth.allow_register 控制是否接受新账号。已有账号的
last_account_data.access 与请求中的 access 直接按字节比较;当前实现不提供密码哈希,适用于受控的
开发和测试环境,不应被描述为生产密码安全方案。
预生成账号使用 GM 命令:
auth-gen-accounts <count> <open-id prefix> [start index]
count 范围为 1 到 10000,open-id prefix 必填,start index 默认为 1 且必须为正数。账号类型固定为
internal。已有账号不会被覆盖;预生成账号可在 allow_register=false 时登录。
GM 回调只报告异步任务是否成功调度,不代表全部数据库写入已经完成。生成的 open_id 和密码明文写入服务
日志,必须按敏感信息限制日志访问、保留和转发。
Steam 离线验票
启用 Steam 需要构建时包含 Steamworks SDK,并设置 steam_auth.enable=true。当前只实现 Encrypted App
Ticket 离线验票:
- 使用
rgub_key,或其为空时使用十六进制rgub_key_hex解密票据; - 校验
app_id、票据签发时间和 SteamID 与open_id的一致性; offline_token_timeout限制离线票据有效期,默认 504 小时。
enable_offline=false 不会切换到在线验证,只会让 Steam 校验失败。online_checking_interval 虽已声明,
当前没有在线验证实现或生效的周期检查;在线路径仍是 TODO。
数据升级
当前登录读取使用 (account_type, open_id) 复合 key,没有旧 key 回退。升级旧数据前必须规划 Redis key
和复合键迁移,并协调 Authsvr 与消费方版本;详见数据层。
实现入口为 src/authsvr/service/logic/algorithm/auth_validate.cpp、
src/authsvr/service/logic/algorithm/auth_account_generator.cpp 和
src/authsvr/service/app/authsvr_main.cpp。