2011-01-06 55 views
7

使用jQuery我打電話Version One Rest API,需要在HTTP頭驗證用戶。jQuery的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."); 
     } 
    }); 

$.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."); 
    } 
}); 

但我總是彈出一個要求我的憑據(我使用Chrome)。即使在彈出窗口中輸入憑據時,我也沒有進行身份驗證,並且窗口不斷顯示。

  1. 如何使用HTTP標頭中的jQuery驗證用戶?
  2. 有沒有辦法讓密碼屬性加密隱形?或者Base64是唯一的方法。我想通過一個帳戶訪問服務器,但不希望客戶端的用戶看到密碼(或者在javascript中找到它)。
+0

「我想僅通過一個帳戶來訪問服務器,但不希望在客戶端用戶看到密碼」 - 這將是不可能用這種方法,除非你獲取從服務器端的密碼(這感覺像一個壞實踐)。 Base64編碼不是使密碼不可見的一種方式,它很幼稚地容易恢復。 – 2011-01-06 22:55:18

+0

謝謝。我擔心這是不可能的。同意,Base64正確。 – padis 2011-01-06 22:59:30

回答

4

這不完全是不可能的,只是一點點尷尬。您可以通過您自己的服務器代理所有AJAX,如下所示:

  • 您的JavaScript通過AJAX與您的服務器聯繫。
  • 您的服務器設置了相應的基本認證頭(或任何身份驗證,您需要使用)請求https://www10.v1host.com/.../VersionOne/rest-1.v1/...
  • 您的服務器將回復發送回您的腳本,完全按照www10.v1host.com發送給您的服務器。

通過這種方式,密碼保持不可見,並在您的服務器上進行控制,並且客戶端代碼獲得與從www10.v1host.com獲得的API相同的API。這種方法可能會引入一點滯後,但這應該是可以管理的。

當然,你還必須考慮瀏覽器和服務器之間的認證過程,但你應該能夠使用任何授權你已經爲(可能是餅乾和樸實的登錄)。

您還需要檢查這一技術對服務的API條款,以確保你玩好的。

+0

謝謝,這是一個好主意。我實際上最初想通過服務器端的Java調用該REST API,但服務器在無法訪問外部網絡的計算機上運行。客戶端機器被允許出門。 – padis 2011-01-07 20:28:32