You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

对接ASP.NET Core CMS JWT API的安卓应用认证方案设计咨询

方案整体合理性评估

你设计的前3步逻辑完全可行,只有第4步的本地存储用户密码属于严重的安全设计错误,绝对不可采用:无论你用什么加密方式存储用户明文密码,一旦用户设备被root、应用数据被恶意导出,就会直接造成全量用户密码泄露,对内部CMS系统来说风险不可接受。
你提到的重型认证方案确实没必要适配你的场景,仅需对你现有JWT接口做极小改动就能解决长期免登录的需求,完全不用动现有稳定的业务逻辑。

第4步最优实现路径

首选方案(后端仅需极小改动)

只需要给现有JWT体系增加刷新令牌(Refresh Token)逻辑即可:

  • 原有登录接口验证用户身份通过后,除了返回原有有效期数小时的JWT访问令牌(Access Token),额外返回一个有效期可设置为15/30天的刷新令牌,刷新令牌可以是随机无意义字符串,也可以直接生成长有效期的带签名JWT,无需额外存储后端数据,验签即可生效
  • 安卓端无需存储用户密码,仅需存储访问令牌和刷新令牌,存储不要用普通SQLite,直接使用安卓官方Jetpack组件库的EncryptedSharedPreferences即可,是系统级加密存储,自动处理密钥生成、数据加密逻辑,几行代码就能接入,普通应用无权限读取你存储的内容,安全等级符合行业规范
  • 后续调用API时如果返回401状态码,说明访问令牌已过期,直接调用后端新增的刷新接口,携带本地存储的刷新令牌,后端校验有效后直接返回新的访问令牌和新的刷新令牌(每次刷新都更换刷新令牌,降低泄露风险),整个刷新过程用户无感知
  • 仅当刷新令牌也过期时,才弹出登录页要求用户重新输入身份凭据

零后端改动备选方案

如果你完全不想改动现有后端逻辑,可以采用安卓系统级的账号托管能力:

  • 使用安卓系统AccountManager服务,用户首次登录后将密码加密存储到系统账号托管区,系统会做隔离加密,只有你的应用有权限读取,安全等级远高于自己存到应用数据库/普通配置文件
  • 访问令牌过期时,直接读取系统存储的密码静默调用登录接口换取新的JWT即可,全程无需用户操作

内容的提问来源于stack exchange,提问作者josibu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 09:27:04