跳到本文

身份与交易

Account

共享身份、通行密钥与应用授权

Account 是多个产品共用的身份与授权服务。它核验通行密钥和外部身份,通过原始登录请求把认证结果交给获准的业务后端;后端兑换并验证后,建立应用自己的会话。登录、添加凭据、机器授权和付款标记分别处理,业务权限仍由各产品决定。

为独立应用接入同一个账号 用户从业务应用发起登录,Account 完成凭据验证,业务后端核对原请求后创建本应用会话。账号身份可以共享,应用路由、会话保存和业务权限仍由各应用明确管理。

从业务自己的登录请求开始

这是一条 OIDC 授权代码流程。登录分成浏览器、业务后端和 Account 三方。业务后端先保存短期原请求,记录状态标识(state)、随机数(nonce)和授权码校验机制(PKCE),再把浏览器引向 Account 的认证界面。认证完成后,结果只返回该应用精确登记的回调地址;不同应用可以使用独立域名。

后端核对回调属于原请求,兑换一次性授权码,再验证签名、签发方、接收方、随机数与有效期。全部成立后,应用才创建自己的会话。交换结果不明时,需要从原应用发起新登录,不能重发可能已用过的授权码,也不能借用另一页面的请求。

三方登录时序:后端保留原请求,浏览器前往 Account 认证并返回原回调,后端兑换授权码、核验令牌并创建会话。
兑换授权码、核验令牌,再创建会话沿浏览器、业务后端和 Account 三条角色线阅读。认证返回原回调,业务后端只兑换一次授权码;最后的本地核验通过后,才创建应用自己的会话。

应用后端持有登录上下文与机密

应用接入时需要明确的 HTTPS 签发方、保密客户端凭据、精确登记的回调地址和所需身份声明。浏览器负责前往认证页面,业务后端保存原登录上下文并执行令牌交换;客户端机密不进入前端资源。

后端为每次登录独立产生 state、nonce 与 PKCE 材料,并把它们绑定到发起登录的浏览器。发现文档、验证密钥、HTTP 传输与业务会话仍由接入方正确配置;仅能访问认证页面,并不构成完整接入。

原登录请求、精确回调、令牌兑换与完整验证依次连接到应用自己的业务会话。
把回调绑定回原登录请求业务后端保留原登录交易,核对精确回调与原 state,接纳完整且合规的令牌响应,并核验 ID Token 的签名、签发与接收方、nonce、时间有效性及账号声明。满足这些原绑定与认证约束后,应用才建立自己的业务会话。
  1. 登记应用与返回位置

    确定签发方、客户端和精确回调地址;回调的字节匹配不能用宽泛域名或重定向规则代替。

  2. 保存原浏览器请求

    建立短期登录上下文,固定 state、nonce、PKCE 与对应浏览器,再发起授权跳转。

  3. 完整验证后创建会话

    核对原回调、交换一次授权码,并验证令牌的签名与全部必需声明,再由应用创建自己的会话。

稳定身份来自明确的凭据归属

Account 为账号分配永不复用的身份。用户可使用通行密钥,也可通过微信、支付宝、抖音、Google、GitHub 或 Microsoft 登录。外部身份按提供方规定的稳定用户标识与适用范围核验,邮箱、昵称和展示资料不能用来合并账号。

一个账号可以保留多把通行密钥;同一种外部提供方只绑定一个身份。新增凭据归属当前认证的原账号,不能创建替代账号或转移已归属的身份。提供方配置删除或应用标识变化后,历史绑定仍保留原身份范围,能否继续使用需按当前配置判断。

三种操作,各自改变什么
操作使用的身份依据持久化结果
首次认证通过核验的全新凭据新账号、凭据和 Account 会话
已有账号登录已归属的凭据该账号的新会话,不替换账号
添加凭据原账号的会话与本次证明新增绑定,不创建替代会话

每份证明只完成原来的动作

登录和添加外部身份的流程都有固定截止时间,读取页面或开始下一步不会续期。通行密钥的验证请求还绑定原浏览器、用途和精确来源。外部回调先在数据库中取得该流程的唯一处理权,再兑换提供方授权码,并发回调不能重复发起同一次交换。

通行密钥要求用户验证,并核对签名、来源、网站标识(RP ID)和计数变化。普通外部授权回调不证明用户刚完成认证。要求重新认证,或距上次认证的时间不符合要求时,流程需要新的本地通行密钥验证,并使用这次验证的真实时间。

取消、到期和交换未知都回到原登录

用户取消或提供方返回错误时,也要先验证回调中的 state 属于原浏览器请求。错误不能让一个页面关闭另一个页面的登录,也不能借用另一项尚未到期的上下文。添加登录凭据时,原账号同样保持固定。

授权码交换结果未知时,不创建已验证会话,也不再次兑换可能已被使用的代码。接入方应保留真实结果,并让用户从原应用开始一项新的登录。固定到期的旧流程不会因刷新页面或等待网络恢复而自动续期。

  • 准入条件:原回调和身份令牌均通过完整验证

    验证范围包含签发方、接收方、nonce、有效期和签名,并保持原浏览器绑定,才允许建立应用会话。

  • 不能推断:外部授权返回即刚完成身份验证

    普通 OAuth 回调不证明一次新的本地用户验证;要求新鲜认证时,必须使用对应的真实证明。

  • 继续核对:凭据的用途与接收方

    ID Token、UserInfo 访问和机器授权各自完成不同任务,不能因同属一个账号就相互代用。

为不同接收方签发不同授权

身份令牌(ID Token)告诉指定应用本次登录对应哪个账号;UserInfo 身份信息接口返回同一账号的当前信息;机器授权则让后端在获准范围内调用 Transact 交易服务。三种凭据分别限定用途、接收方和权限,不能互相代替。

付费状态是长期保存的账号标记。Transact 确认首次金额大于零的收款后请求设置标记,Account 按客户端配置返回对应身份声明。读取不回查支付系统,也不处理金额、余额、准备金或退款。应用与账号的永久关联在原授权码成功兑换时才建立。

身份与授权的不同用途
凭据用途有效期
身份令牌 ID Token指定应用验证登录身份15 分钟
UserInfo 访问令牌读取原账号与原客户端对应的当前信息15 分钟
Transact 机器令牌限定应用、接收方与操作范围5 分钟

把限制、维护与验证放在准确边界

管理端可查询账号、应用关联,以及现有登录方式与当前配置是否相容,并修改本地限制。认证入口和最终保存结果时会检查限制,账号仍可退出自己的会话。其他产品的会话、已签发且可离线验证的身份令牌和机器授权,继续遵循各自权限。

过期认证记录按到期索引分批清理,保留账号、凭据、有效授权和付费状态。设计验证关注原浏览器绑定、并发首次登录、重复回调、晚到证明,以及换签名密钥时保留旧验证密钥的衔接。清理工作按到期记录进行,不随有效会话增多而转为全表扫描。