开发者社区 > 博文 > ios13.3,跨域登录探索
分享
  • 打开微信扫码分享

  • 点击前往QQ分享

  • 点击前往微博分享

  • 点击复制链接

ios13.3,跨域登录探索

  • 京东黄金团队(JDGolder)
  • 2021-01-19
  • IP归属:未知
  • 46960浏览

一、事件起源

2019年11月中旬。京东黄金业务接到客户投诉。反应用户在京东金融登录后打开京东黄金页面,无法登录。无法展示用户持仓。

二、问题排查


这是一个很严重的问题,我们自己查了下页面打开均显示正常。但是用户截图录屏反应:用户登录金融app成功后跳转到黄金页面后无法获取登录态。
之后陆陆续续也有有用户发起投诉。查了很久,通过日志监测,发现这些用户有一个共通点,均使用的是ios手机且系统已升级到ios13.3beta 版。

我们找到了用户群体的共同特性。之后便可以很好的排查问题了。

到底是手机问题还是升级到ios13.3系统的问题呢?

原因找到了:ios官方消息称,ios13.3系统,禁用第三方cookie。而这些用户都是优先升级了系统。导致的app网关接口无法通过跨域请求获取其他域名下的cookie,从而导致登录失效。


举例说明


用户在金融App登陆了之后,通过原生webview,打开域名A.com 的页面,同时下写入了登录cookie ,因为A.com  为京东内部域名,是一套打通网关和环境的主域名 。但是用户访问了B.com域名的页面 。B.com域名 调用了A.api.com 的网关接口。但是网关接口无法从A.com域名下去拿到cookie 。故而系统判定用户登录失效。

附上一个简单的流程图说明一下:方便理解




就是B.com的域名 必须调用B.api.com的网关接口同时,登录cookie要写入B.com的域名下。才能正常访问。


解决步骤

1、要想实现页面B.com调用B.api.com的接口。首先要申请B.api.com 的网关接口服务  。也就是(通过域名解析,将域名B.api.com域名解析到A.api.com下 )

2、登录后需要往B.com的域名下写入cookie  (通过统一登录,添加APP域名白名单,也就是打通网关登录,让app能够正常访问B.com域名并写入cookie)




ok完美解决!!!

趁ios 还只是beta版本。还没有正式发版之前我们解决了这两个问题。同时更新手机系统,经过测试,的确可以克。app登录之后,往我们域名B.com下写入了登录cookie。同时前端修改接口api调用,发布上线。调用B.api.com接口,均正常。


But:

你以为万事大吉了。却发现一个比较隐秘的问题。运营将B.com的页面配置了另外一个入口 。入口比较深 是配置在一个A.com的域名页面上。
问题出在哪儿呢?
原来是App首次打开的页面是A.com域名的页面 。只是往A.com域名下写入cookie。但是再从A.com页面跳转到B.com的页面之后,B.com域名下并没有登录cookie 。


说明一个道理二手货毕竟不是好货,不是自己的用都用不了啊!!!




没办法,到了B.com域名的页面下只能让用户重新登录了。于是跳转到登录页面没反应,因为app告诉我已经登录了,直接回跳当前页面。在登录操作的时候没有反应。


原来统一登录做了一个h5的登录页面,在登录页面上带上域名所需要的参数。也就是有一个特有的h5登录页面,登录成功后可以直接往特有的域名下写入cookie,并回跳。ok跳到h5登录页面,并带上唯一标识入参。
总算是解决了登录问题了。

大家是不是觉得那也太麻烦了。而且体验并不是很好,用户已经在app登录过了,为啥要重新登录一遍呢?
其实
我们有终极方案:
因为登录都是通过原生交互写进去的。只要中间页面打开第三个页面的时候使用js跳转打开一个新的webview,而不是直接使用location.herf。就行,同时B.com通过统一登录加过域名白名单。实测有效。
需要在中间页面A.com下跳转B.com页面的时候使用原生方法打开webview去跳转就好了。至于原理应该是app端的做法。只要走了原生交互跳转方法,就会往域名下写入cookie

这就是系统升级ios13.3以后我们走的慢慢探索长路。欢迎留言分享。

共0条评论