2012-07-12 112 views
1

我正在尝试构建一个Delphi XE2 DataSnap Rest服务器,作为第三方API访问我们的DBMS。通过jQuery和AJAX传递DataSnap身份验证凭证

我已经扩展了使用xe2中的其余datasnap向导提供的身份验证和授权提供的示例方法的功能。

我可以确认,我写的所有服务器方法都会传回直接通过浏览器访问的数据。

问题来自于尝试通过$ .ajax()调用向服务器进行身份验证。

从浏览器地址栏访问时,系统会提示您输入用户名和密码,并且当您为两者输入“dev”时,允许您继续。

当将ajax()用户名和密码参数设置为“dev”时,我得到一个HTTP 401响应。

我想我做正确,但这里是代码片段:

$("#contentdiv").click(function(){ 
     $.ajax({ 
      type:"GET", 
      cache:"false", 
      username:"dev", 
      password:"dev", 
      url:"http://192.168.0.2:8080/datasnap/rest/TServerMethods1/methodname/", 
      dataType:"jsonp", 
      statusCode: { 
       200: function(data){ 
        alert('success '); 
       } 
      }    
     }); 
}); 

如果我关掉认证,我能顺利拿到一个HTTP 200响应(虽然在JSON德尔福语法错误DataSnap正在返回,但这是一个不同时间的问题)。

另外,什么是值得了解的 - 如果我手动登录,然后运行ajax,它的工作原理 - 我假设这是因为凭据缓存或一些这样的。

这两种技术相当新颖,所以要温和。 如果我遗漏了一些可能导入的东西,请告诉我,我会在这里解决它。

回答

0

您的Ajax代码使用JSONP,服务器使用基本认证。

this answer注释说,JSONP不能包含哪些基本认证需要用户/ PWD标题:

Basic Authentication with jQuery.ajax request and jsonp

的原因是(从上面的答案引号):

JSONP工作方式不同,它是一个GET请求通过标记包括 来获取文件,所以你不发送特殊的标题或任何东西。