Flutter Android端OAuth认证的用户证书缓存清除与证书弹窗触发问题
Flutter跨端应用Android端OAuth证书认证适配问题
现有实现基础
- 应用基于Flutter框架开发,同时适配Android、iOS双平台
- 业务强制要求每次登录环节必须提示用户完成证书选择与验证,因此所有获取authCode的请求均携带
prompt=login参数 - 当前iOS端全流程运行完全符合预期
Android端核心异常表现
即便是请求中携带了prompt=login参数,Android端流程跳转时也不会再次弹出证书选择框,直接基于浏览器侧已缓存的证书信息完成认证,不符合业务要求。
已尝试方案与对应卡点
- 基于
flutter_inappwebview实现的WebView方案:WebView环境下无法唤起系统证书选择弹窗,流程无法正常推进 - 基于
flutter_appauth内置Custom Chrome Tab的实现方案:认证流程可正常唤起弹窗,但登出环节无法清除Custom Chrome Tab、系统Chrome浏览器存储的证书缓存,二次登录直接复用已有缓存 - 基于
oauth2库对接系统浏览器的实现方案:开发侧完全无权限控制系统浏览器的缓存逻辑,无法干预证书存储状态 - 原生Java层尝试缓存清理的方案:通过
CookieManager实现的清理逻辑仅能覆盖内置WebView的存储范围,完全无法触达系统浏览器、Custom Chrome Tab侧的缓存数据
已验证排查结论
手动终止设备上运行的浏览器应用后,系统会自动清除其缓存的证书信息,此时再次发起认证请求,可正常弹出证书选择框,完全符合预期行为。
具体诉求
- 实现登出环节主动清除Custom Chrome Tab、系统浏览器侧的证书缓存
- 或调整WebView实现逻辑,使WebView环境下可正常唤起系统证书选择弹窗,满足业务要求
内容的提问来源于stack exchange,提问作者s1curepwnd
相关产品推荐
相关产品推荐

