跳到主要内容

数据库设计

核心表​

merchant - 商户表(公司信息)​

字段类型说明
idint主键
namevarchar(255)商户名称
emailvarchar(255)商户邮箱
slogantext口号
id_numbertext执照号
telvarchar(50)联系电话
addresstext商户地址
statetinyint状态 1=启用 0=禁用
created_atdatetime创建时间
expired_timedatetime过期时间

merchant 表只保留公司信息,管理员登录凭证已统一到 user 表

user - 统一用户表(管理员 + 终端用户)​

字段类型说明
idint主键
merchant_idint商户ID
namevarchar(255)姓名
emailvarchar(255)邮箱
user_namevarchar(255)用户名
telvarchar(50)手机号
passwordvarchar(255)密码哈希
salttext加密盐值
ciphervarchar(500)加密方式 (bcrypt/pbkdf2)
password_historytext密码历史 (JSON)
must_change_passwordtinyint是否必须改密
password_changed_atdatetime最后改密时间
originvarchar(50)来源 (admin/register/oauth)
statetinyint状态
last_login_atdatetime最后登录时间
last_login_ipvarchar(45)最后登录IP
created_atdatetime创建时间
expired_timedatetime过期时间

管理员和终端用户共用此表,通过 app_user 绑定和 user_role 区分权限

app - 应用表(产品层)​

字段类型说明
idint主键
namevarchar(255)应用名称
merchant_idint商户ID
app_logotext应用Logo
app_icontext应用图标
crosstinyint跨应用授权
publictinyint开放注册
typevarchar(20)应用类型: public/private/internal
configjson应用配置
statetinyint状态
created_atdatetime创建时间
expired_timedatetime过期时间

type=internal 的应用为商户管理后台,注册时自动创建,不可删除

client - 客户端表(场景层)​

字段类型说明
idint主键
namevarchar(255)客户端名称(场景名)
app_idint所属应用ID
merchant_idint商户ID
client_secretvarchar(255)OAuth 密钥
callback_urltextOAuth 回调地址(支持逗号分隔多个)
sso_urltextSSO 回跳地址
primary_redirect_urltext默认跳转地址
slo_urltextBack-channel 登出 webhook
frontchannel_logout_urltextFront-channel 登出 URL
logout_redirect_urltext登出后跳转地址
publictinyint此场景是否开放注册
statetinyint状态
created_atdatetime创建时间
expired_timedatetime过期时间

一个 App 可有多个 Client(内部/B2B/公开),共享 logo/用户池

app_user - 应用用户表(绑定关系)​

字段类型说明
idint主键 (= open_id)
union_idint关联 user.id
app_idint应用ID
merchant_idint商户ID
nick_namevarchar(255)昵称
originvarchar(50)来源
statetinyint状态 (0=待激活, 1=已激活)
created_atdatetime创建时间
expired_timedatetime过期时间

每个用户在每个应用下有独立的 app_user 记录和 open_id state=0 表示待激活(私有应用注册),state=1 表示已激活(公开应用自动激活)

token - 令牌表​

字段类型说明
idint主键
token_typestringaccess_token / refresh_token
user_idintapp_user.id
app_idint应用ID
merchant_idint商户ID
tokenvarchar(2000)token 值
expire_timeint过期时间戳
formatvarchar(20)opaque / jwt
kidvarchar(64)签名密钥ID
jtivarchar(64)JWT ID
app_typevarchar(20)primary / micro_application
statetinyint状态
create_timedatetime创建时间
update_timedatetime更新时间

auth_code - 授权码表​

字段类型说明
idint主键
codevarchar(255)授权码
typevarchar(255)token / code
user_idvarchar(255)app_user.id
merchant_idint商户ID
app_idint应用ID
app_typevarchar(20)primary / micro_application
expireint过期时间戳
statusint状态 0=已使用 1=有效
code_challengevarchar(255)PKCE challenge
code_challenge_methodvarchar(20)PKCE method
create_timedatetime创建时间

role - 角色表​

字段类型说明
idint主键
merchant_idint商户ID
namevarchar(255)角色名称
descriptiontext描述
is_built_intinyint是否内置角色(如 admin)
statetinyint状态
created_atdatetime创建时间
update_timedatetime更新时间

permission - 权限表​

字段类型说明
idint主键
namevarchar(255)权限名称
codevarchar(255)权限代码
descriptiontext描述

user_role - 用户角色关联​

字段类型说明
idint主键
user_idintuser.id
role_idintrole.id
merchant_idint商户ID

developer - 开发者表​

字段类型说明
idint主键
merchant_idint商户ID
app_idint应用ID
keyvarchar(255)API Key
tokenvarchar(255)API Token
secretvarchar(255)API Secret
statetinyint状态

jwt_key - JWT 密钥表​

字段类型说明
idint主键
merchant_idint商户ID
public_keytext公钥 PEM
private_keytext私钥 PEM
kidvarchar(64)密钥ID
algorithmvarchar(20)RS256

audit_log - 审计日志表​

字段类型说明
idint主键
merchant_idint商户ID
user_idint操作者ID
actionvarchar(255)操作类型
resourcevarchar(255)资源
ipvarchar(45)IP地址
user_agenttextUser-Agent
detailtext详情 (JSON)
created_atdatetime创建时间

Redis 缓存键​

前缀说明TTL
sso_session:*SSO 会话24h
sso_token:*SSO Token24h
agent_token:*智能体 Token2h
agent_token:app:*智能体应用 Token 缓存1h
slo_callback:*SLO 回调注册1h
slo_token:*SLO 一次性 Token5min
login_*登录失败锁定自动过期