2012-07-12 122 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請求通過標記包括 來獲取文件,所以你不發送特殊的標題或任何東西。

相關問題