通过 Launch 与 Licentivo 接入应用
本指南适用于 Licentivo 提供方。不使用 Licentivo、而对接商户自有授权系统时,应使用自定义授权 API 与接入流程,为产品和环境选择 custom_http,并保留该系统的运行时 SDK。
这些尚未发布的本地改动使用账号身份交换。迁移及服务端会话撤销参见职责与购买同步契约。本次改动没有发布或升级包版本号。
Launch 负责商户账号、订单、价格、续费和升级报价、退款及绝对购买日期。Licentivo 负责许可证、策略、设备额度、授权会话、签名许可和运行时决定。Launch 登录成功或购买同步成功,绝不表示可以执行受保护业务。
使用后台接入页取得直接连接调用和固定受信的产品公钥。九种语言包装层均包含官方 SDK。商户管理密钥和支付密钥留在服务端。公开产品设置不包含客户凭据、设备 ID、缓存路径或身份断言。
账号交换
sequenceDiagram
participant App as Application
participant Launch as Launch server
participant SDK as Official Licentivo SDK
participant Lic as Licentivo server
App->>Launch: Account login
Launch-->>App: Account session
App->>Launch: POST /software/products/{id}/identity
Launch-->>App: Short-lived signed identity assertion
App->>SDK: In-memory identity + connection + environment
SDK->>Lic: POST /launch/exchange
Lic-->>SDK: Restricted device credential + signed permission + logout ticket
App->>SDK: RunFeature around every protected action
包装层使用 {"environment":"sandbox"} 或 live 请求 POST /api/v1/software/products/{id}/identity。返回的身份断言最多存活 120 秒,绑定已注册签发者、受众、真实登录会话、产品、环境和购买引用。它不包含功能许可、设备额度或离线策略。
官方 SDK 在内存中接收以下值:
{
"product_id": "LICENTIVO_PRODUCT_UUID",
"trusted_keys": {"SIGNING_KEY_ID": "PINNED_PUBLIC_KEY"},
"launch_connection_id": "LICENTIVO_LAUNCH_CONNECTION_UUID",
"environment": "sandbox",
"identity_token": "SHORT_LIVED_ASSERTION_FROM_LAUNCH",
"license_key": ""
}
不得将此运行时配置写入公开文件,或将身份断言持久化到账号记录。Launch v2 记住登录记录只保存账号会话和公开路由上下文。旧客户 /credential 接口返回 HTTP 410。
生命周期与存储
Login:认证账号、申请新身份断言、启动官方 SDK。Restore:联网确认已记住的账号、申请新身份断言、启动官方 SDK。Launch 故障不决定离线许可。RunFeature:每次受保护执行都交给官方 SDK。被拒绝的回调绝不能执行。Close/Dispose/Drop:停止后台工作,保留明确记住的登录和节点绑定。Logout:调用官方 SDK 统一退出,再清除 Launch 账号记录并终止其账号会话。ReleaseDevice:明确退出的兼容别名。必须如实报告待完成的远端撤销。
只有官方 SDK 可删除其设备凭据和租约文件。绝不能删除缓存目录或 .logout.json;该日志保存网络请求失败后仍需使用的受限释放票据。再次初始化匹配缓存时,SDK 会恢复待处理票据。Launch 自有账号存储与 SDK 存储分别由各自管理。
需要离线启动的应用使用官方 SDK 文档规定的恢复流程。只有 SDK 验证签名许可、产品与环境上下文、到期、时钟行为和设备状态。Launch 包装层不从购买日期、本地订单或文件存在与否推断许可。
账号会话默认只保存在内存。持久账号存储必须加密并认证记录,使用操作系统凭据设施保护密钥。按商户、账号、产品和环境使用独立可写缓存。浏览器渲染进程只接收业务结果,不接收桌面账号令牌、身份断言或设备凭据。
购买与设备
Launch 根据已验证付款和不可变订单覆盖计算绝对购买日期,再向 /api/v1/launch/connections/{id}/events 发送带版本快照。轮询事件直至 applied;接收回执本身不是交付。续费和退款重试不能再次增加时长。退款只移除对应订单覆盖;全额退款后重新购买会使用新引用。
无法访问某台设备的用户可打开 Launch 设备管理页。列表、剩余解绑次数、允许动作和操作结果均来自 Licentivo。释放请求携带界面显示的绑定代次及不变的操作 ID。Launch 不另建竞争性的解绑计数器或任务执行器。
验证与限制
测试账号交换、身份断言临时存储、SDK 控制的功能执行、普通关闭、新进程明确退出、待处理释放日志和产品与环境隔离。官方 SDK 的真实签名租约、离线检查和篡改拒绝应与 Launch 账号传输分别测试。编译和夹具不能证明生产验收通过。
Launch 还使用 Licentivo V39 的 session-revocations POST 和回执 GET 接口,处理桌面退出、强制会话退出、密码修改和账号禁用。原接收方与请求持久固定,响应丢失后可恢复,各环境独立确认。账号范围通知待完成时暂停新的桌面认证;确认后,真正新登录的 auth_time 必须严格晚于最新 revoked_before 截止秒。网站恢复仍可用。这些通知绝不改变购买日期。参见职责与恢复契约。