CORS跨域、Cookie传递SessionID实现单点登录后的权限认证的移动端兼容性测试报告...

简述

本文仅记录如标题所述场景的测试所得,由于场景有些特殊,且并不需兼容所有浏览器,所以本文的内容对读者也许并无作用,仅为记录。

场景、与实现

  • 需在移动端单点登录
  • 需在移动端跨域访问我们的服务

基于历史原因:

  • 单点登录验证后,如Web网站一样,用Cookie携带SessionID到服务器,服务器根据SessionID管理该用户会话、权限
  • 跨域用CORS,在服务端和客户端有如下设置。

服务端响应:

httpResponse.setHeader("Access-Control-Allow-Origin", "http://example.com:8080");
httpResponse.addHeader("Access-Control-Allow-Credentials", "true");
httpResponse.addHeader("Access-Control-Allow-Methods", "HEAD,POST,GET,PUT,DELETE,OPTIONS");

客户端Ajax请求时设置withCredentials参数为true,记得返回Cookie的首次请求和其它请求都需设置:

function login() {
    $.ajax({
        url : urlPrefix + "/LoginServlet",
        type : "post",
        xhrFields: {
            withCredentials : true
        },
        success : function(data, name) {
            alert(data)
        }
    });
}

function test() {
    $.ajax({
        url : urlPrefix + "/BusinessServlet",
        type : "post",
        xhrFields: {
            withCredentials : true
        },
        success : function(data, name) {
            alert(data)
        }
    });
}

问题

测试过程:
A项目部署在a机器,B项目部署在a机器,B项目的页面跨域访问A项目
测试结果:

  • 在Web端验证基本没问题
  • 在移动端,IOS的Safari浏览器需要在设置 -> Safari -> 阻止Cookie -> 始终禁止才不能通过Cookie传递SessionID

测试过程:
A项目部署在a机器,B项目部署在b机器,B项目的页面跨域访问A项目。
如果a机器和b机器同属同一局域网:

  • 在Web端验证基本没问题
  • 在移动端,IOS的Safari浏览器需要在设置 -> Safari -> 阻止Cookie -> 始终允许允许访问过的网站仅允许当前网站能通过Cookie传递SessionID
  • 在移动端,我的IOS的QQ浏览器没问题

如果a机器和b机器其中之一属于外网:

  • 在Web端验证基本没问题
  • 在移动端,IOS的Safari浏览器需要在设置 -> Safari -> 阻止Cookie -> 始终允许才能通过Cookie传递SessionID
  • 在移动端,我的IOS的QQ浏览器有问题

目前还没探索出的原因,根据测试结果,可能会改为其它实现方法,比如单点登录后用JWT验证会话,用JSONP跨域。

转载于:https://www.cnblogs.com/nick-huang/p/6979626.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值