技术 / 架构与实现

05 本机HTTP鉴权、会话和WebView边界

基于 Android 1.0.2 / 1.0.2-trial · 2026-10-10 · 完整正文
从本机页面到受限业务接口从本机页面到受限业务接口不通过可信主WebView当前127.0.0.1:动态端口Android运行密钥请求头/HttpOnly同源CookieHost与Origin检查回环Host · 同源 · 拒绝cross-sitePOST令牌与JSON/大小X-Local-Token · 64MiB保护业务/素材/额度验证参数 · 状态 · 版本 · TrialUsage允许的任务与文件能力受控worker/安全媒体读取保护性拒绝403/415/413/400/409
图13|本机请求验证链。先通过应用密钥、来源、POST会话与JSON保护,才进入业务和试用校验;服务仅监听回环地址。小屏可横向滚动查看图示

请求验证顺序

层次 检查项 结果
Android应用访问密钥 X-Android-Key或tingwen_app Cookie与运行态secret恒时比较 不匹配403,拒绝进入业务
Host 仅127.0.0.1或localhost 其他Host拒绝
来源 POST和/api/session在提供Origin时检查其等于当前scheme/host/port;Sec-Fetch-Site不得为cross-site 不同源拒绝;缺Origin本身不拒绝,无放开CORS
本机会话 所有POST要求X-Local-Token等于本进程TOKEN 缺失/过期403,带明确code
内容类型 POST必须JSON 非JSON为415
请求体 最大64×1024×1024字节 超出413
业务校验 标题、音色、图片、状态、版本、额度等 不通过时400/409等

TOKEN通过secrets.token_urlsafe(32)生成,仅在运行内存;Android secret同样不写任务或草稿。首页Cookie设置HttpOnly与SameSite=Strict;回环HTTP没有设置Secure。首页和会话响应为no-store。HttpOnly能限制页面JS读取Cookie,不能替代主WebView导航控制和设备安全边界。

前端仅对服务器明确给出的local_session_expired拒绝进行一次会话恢复与重放:获取同源/api/session、校验产品名与token后重新发原请求。该拒绝发生在任务/模型处理之前,因此可以安全恢复。普通网络断连、Seedream超时或“响应未知”不属于可自动重发场景,防止产生第二次付费请求。

主WebView设置与导航

  • 开启JavaScript和DOM storage,关闭file access;content access供系统选择器交互使用。
  • 拒绝第三方Cookie、禁止mixed content、媒体播放要求用户手势;WebView摄像头/麦克风权限请求直接deny。
  • 主页面仅允许当前http://127.0.0.1:<port>同源导航。主机需字面127.0.0.1、无userInfo、合法且相同端口。
  • 当前源资源、当前源拥有的blob、data和about:blank按代码规则放行;其他资源请求返回403。外部http/https/mailto/tel交给系统应用。
  • 图片放大使用无AndroidNative桥的独立预览WebView,需用户手势;关闭预览会销毁其资源,避免把原生文件能力带给任意外部页面。

网络安全XML默认拒绝cleartext,仅回环域名放行。Python照片下载自行允许并验证公共HTTP/HTTPS,不能把XML设置误解为Python的网上图片只支持HTTPS。APK并未实现证书钉扎、设备加密数据仓库或跨设备身份服务。

依据:app.py:369–419、MainActivity.java:146–239、ExportPolicy.java:9–27、res/xml/network_security_config.xml。

把这些功能用到你的内容里。

免费试用、正式版优惠授权与招商合作:微信 wzqy2019。说明你需要配音、照片视频、PC或Android端,我们一起确定适合的使用方式。

合作从一次沟通开始

让你的内容制作,
找到合适的工作台。

免费试用、优惠授权、PC与Android版本、工作室及渠道合作意向,欢迎直接咨询。

打开微信,搜索 wzqy2019,添加时备注“听文合作”。具体授权、价格与合作政策以沟通为准;本站不收款。