【问题标题】:jQuery core with mobile safari带有移动 safari 的 jQuery 核心
【发布时间】:2015-01-02 09:09:35
【问题描述】:

我最近一直致力于让 CORS 在我构建的一些 Web 应用程序上运行,但在我们公司 iPad 上的移动 safari 中遇到了一个神秘的问题。

环境分解,我有一个托管网页的前端服务器。然后我有 2 个不同的后端服务器,Sharepoint 2013 和 CRM 2011。它们都有 REST 服务,我试图从前端服务器上发布的应用程序访问这些服务。

在两个后端服务器上,在 IIS 中,我将响应标头设置为:

  • 访问控制允许来源:前端服务器服务器名称
  • 访问控制允许凭据:true
  • 访问控制允许方法:GET、POST、PUT、DELETE、OPTIONS
  • Access-Control-Allow-Headers:内容类型、授权、接受、来源

在我的 $.ajax 调用中,我添加了

xhrFields: { withCredentials: true }。

所以一个简单的查询现在看起来像:

function getRequestDigestTEST() {
$.support.cors = true;
$.ajax({
url: 'http://sharepoint/_api/contextinfo',
method: "POST",
headers: { "Accept": "application/json; odata=verbose" },
xhrFields: { withCredentials: true },
success: function(results) {
requestDigest = results.d.GetContextWebInformation.FormDigestValue;
},
error: function (error) {
alert(error.status);
}
});
} 

这一切都适用于任何桌面浏览器,但我的问题是移动 safari。在 iPad 上,我收到 401 未经授权的退货。当我在 IIS 上启用跟踪时,后端服务器会将移动 safari 传递的身份验证视为匿名。在桌面浏览器中,我看到 NTLM 具有正确的用户名。

我还尝试将用户名/密码属性添加到 ajax 调用,但即使这些属性似乎也没有传递给 Web 服务,因为跟踪仍然报告匿名身份验证类型。

我四处寻找,似乎找不到任何可以让 iPad 与后端资源对话的东西。

【问题讨论】:

    标签: jquery ajax ipad safari cors


    【解决方案1】:

    对于 Sharepoint,我可以通过在 ajax 调用上设置 2 个设置来使其正常工作,但 CRM 我必须构建自己的 Web 服务,充当 REST 调用的代理。

    除非您在 Sharepoint 上进行了匿名设置(您很可能不想或不想这样做),否则 ajax 调用会进行预调用。为了在预调用中进行身份验证,我们需要将 ajax 调用中的标头信息设置为函数。

    authPreCall = function(req) { req.setRequestHeader("Authorization", sessionStorage.getItem("LoginToken")); };
    

    在我的所有应用程序中,我现在检查最终用户是否在 iOS 设备上,如果是,我将他们转发到一个长屏幕,在此我根据他们输入的凭据生成登录令牌。然后当他们需要访问 Web 服务时,我检索会话令牌并将其传递给服务。

    需要的另一个 ajax 设置是“xhrfields”。

    authFields = { withCredentials:true };
    

    然后我将 authFields 变量传递给 ajax 调用的 xhrfields 属性。

    在我最初的帖子列表中,您想要访问的 Sharepoint 站点也需要输入这些所需的 IIS 属性。

    同样,CRM 是一种不同的动物,因为这些设置不起作用,我必须构建一个 .NET Web 服务,该服务将对 CRM 进行身份验证并从那里进行 REST 查询。因此,我从 javascript 创建了一个有效负载对象,其中包含我需要完成的 REST 查询,然后 Web 服务执行它并将结果返回给接口。

    希望这会有所帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-30
      • 2018-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      相关资源
      最近更新 更多