2013-03-02 109 views
1

我的服務的一些用戶希望能夠通過瀏覽器中的JavaScript訪問我們的REST API(需要用戶憑據)。我不會允許這通常是由於所有與違反相同原產地政策相關的漏洞。但是,如果一個特定的用戶需要它並理解正在發生的事情......我希望將他添加到「可以創建跨請求源」白名單。如何通過授權信息選擇性地允許跨源資源共享?

但是,我不知道如何有選擇地返回基於http授權信息的Access-Control-Allow-Origin標頭。

如果我這樣做在javascript:

$.ajax({'url':'url', 'beforeSend': function (xhr) { xhr.setRequestHeader("Authorization", "Basic " + 'base64encodedcreds') } }) 

瀏覽器首先發送未經授權報頭的原點方法請求。因此,我無法知道是否應在響應中包含Access-Control-Allow-Origin。

在xmlhttprequest中是否有一些設置讓它通過授權發送ORIGIN?或者還有另一種方法可以有選擇地授予跨源訪問權限嗎?

回答

1

基於duskwuff的答案,這是不可能的我把這個接近路線不必創建新的網址:

  • 始終接受與選擇的查詢訪問控制允許來源
  • 如果一個GET/POST進來,檢查選項頭。如果用戶未被列入白名單,請檢查用戶憑證和401。

(很容易用django中間件拉開)

1

有沒有辦法繞過這種行爲 - 傳遞授權標頭是AAAO試圖限制的行爲之一。但您可以避開它:

  • 爲此用戶創建單獨的端點URL。
  • 讓此端點始終返回允許訪問的Access-Control-Allow-Origin。 (或其他)
  • 有沒有這個端點也總是返回401(未授權)的任何用戶,而不是你想要允許的。