【问题标题】:Basic Authentication and jQuery/ajax call基本身份验证和 jQuery/ajax 调用
【发布时间】:2012-12-07 13:49:21
【问题描述】:

我想调用通过基本身份验证对用户进行身份验证的 OData .NET Web 服务。

我使用以下 ajax 调用:

var fullUri = APIUri + "?$format=json";
$.ajax({
    url: fullUri,
    contentType: "application/json",
    dataType: "jsonp",
    type: 'GET',
    jsonp: '$callback',
    beforeSend: function setHeader(xhr) {
        xhr.setRequestHeader('Authorization', token);
    },
    success: callback,
    error: function (xhr, ajaxOptions, thrownError) {
        alert(thrownError);
    },
});

结果对我来说无法使用:

  • 由于 CORS,调用被阻止(直到我将粘贴 API url 并尝试在 chrome 中加载它)。我尝试将本地 html 文件和 html 文件上传到同一个域/端口,但身份验证失败(根据 Chrome 控制台)。
  • 在 Chrome 地址栏中输入服务 URL 后,Chrome 会要求我提供登录名和密码。如果我输入它们,即使我在 beforeSend 中分配它们,它们也会被缓存和使用。如何阻止这种行为?

我已经尝试了很多如何配置 jsonp、标头等的示例,但还没有找到可行的解决方案。

IIS 服务器响应标头也使用“Access-Control-Allow-Origin” value="*" 进行配置。

【问题讨论】:

    标签: ajax jquery odata


    【解决方案1】:

    您可以直接在 AJAX 调用中设置 HTTP 密码和用户名:

    $.ajax({
        url: fullUri,
        contentType: "application/json",
        username: <login>,
        password: <password>,
        ...
    

    【讨论】:

      【解决方案2】:

      使用以下内容支持 CORS:

      jQuery.support.cors = true; 
      

      关于通话,您使用的是 HTTPS 吗?证书有效吗?

      【讨论】:

      • 是否需要 HTTPS?我不使用它,只使用 HTTP。
      猜你喜欢
      • 2012-03-30
      • 2011-07-27
      • 1970-01-01
      • 2016-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多