jQuery HTTP身份验证

pad*_*dis 7 authentication rest jquery

使用jQuery,我调用的是Version One Rest API,需要在HTTP头中验证用户身份.

我试过了

$.ajax({
        dataType: "jsonp",
        beforeSend: function(xhr){
            xhr.setRequestHeader("Authorization", "Basic xyz"); // xyz usr:pwd Base64 encoded
        },
        url: "https://www10.v1host.com/.../VersionOne/rest-1.v1/...",
        success: function(data, status, xhr) {
            alert("Load was performed.");
        }
    });
Run Code Online (Sandbox Code Playgroud)

$.ajax({
    dataType: "jsonp",
    username:"usr",
    password:"pwd",
    url: "https://www10.v1host.com/.../VersionOne/rest-1.v1/...",
    success: function(data, status, xhr) {
        alert("Load was performed.");
    }
});
Run Code Online (Sandbox Code Playgroud)

但我总是弹出来询问我的凭据(我使用Chrome).即使我在弹出窗口中键入凭据,我也没有通过身份验证,窗口仍然显示.

  1. 如何在HTTP头中使用jQuery对用户进行身份验证?
  2. 是否有任何方法使密码属性加密不可见?或Base64是唯一的方法.我想只通过一个帐户访问服务器,但不希望客户端的用户看到密码(或在javascripts中找到它).

mu *_*ort 4

这并非完全不可能,只是有点尴尬。您可以通过您自己的服务器代理所有 AJAX,如下所示:

  • 您的 JavaScript 通过 AJAX 联系您的服务器。
  • https://www10.v1host.com/.../VersionOne/rest-1.v1/...您的服务器使用适当的基本身份验证标头(或您需要使用的任何身份验证)设置请求。
  • 您的服务器将响应发送回您的脚本,与www10.v1host.com发送到您的服务器的响应完全相同。

这样,密码在服务器上保持不可见并在您的控制之下,并且客户端代码获得与www10.v1host.com. 这种方法可能会带来一点滞后,但这应该是可以管理的。

当然,您仍然需要考虑浏览器和服务器之间的授权过程,但您应该能够使用您已经拥有的任何授权(可能是 cookie 和普通的旧登录名)。

您还需要根据 API 服务条款检查此技术,以确保您玩得很好。