2012-12-14 24 views

回答

0

你可以用提琴手或wireshark捕捉流量嗎?基本身份驗證不起作用....

0

我有同樣的問題。我關注了博客文章(http://jaydata.org/blog/jaydata-1.0.5-is-here-with-authentication-support-and-more),並將基礎認證的憑證應用於上下文初始化。

var ctx = new NutritionDataService.NutritionDbEntities({ 
     name: 'oData', 
     oDataServiceHost: 'https://localhost:44300/Data.svc', 
     user: "usr1", 
     password: "test" 
}); 

但似乎沒有設置授權標頭。

http://i.stack.imgur.com/F228l.png

我也想盡了辦法在這個崗位Problems with jaydata basic authentication具有相同的結果 - 沒有授權頭被髮送。

有沒有人有一個想法如何觸發jaydata發送授權頭?

0

好的,

我找到了上述問題的解決方案。問題在於使用CORS的服務器端配置錯誤。在記錄的請求中(請參閱http://i.stack.imgur.com/F228l.png),Chrome發送「預檢請求」(HTTP請求具有OPTIONS方法)。

與上述的簡單請求不同,「預檢」請求首先通過OPTIONS方法向另一個域上的資源發送HTTP請求,以確定實際請求是否安全發送。

https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS#Preflighted_requests

我沒有驗證HTTP屬性「方法」在服務器上,所以我的基本驗證模塊開始授權過程的每個傳入HTTP請求並立即失敗做的第一個請求(「預檢要求「),因爲沒有設置授權頭。

在修改HTTP方法的所有驗證之後,按照預期進行工作。

我也不得不調整web.conf

<system.webServer> 
<modules runAllManagedModulesForAllRequests="true"> 
    <add name="BasicAuthModule" type="NutritionDataService.Auth.BasicAuthModule"/> 
</modules> 
<httpProtocol> 
    <customHeaders> 
    <add name="Access-Control-Allow-Origin" value="*" /> 
    <add name="Access-Control-Max-Age" value="3600" /> 
    <add name="Access-Control-Allow-Headers" value="Origin, Content-Type, Accept, MaxDataServiceVersion, Authorization, Access-Control-Allow-Origin, DataServiceVersion" /> 
    <add name="Access-Control-Allow-Methods" value="PUT, POST, GET, DELETE, MERGE, OPTIONS" /> 
    </customHeaders> 
</httpProtocol> 

接入控制允許頭部中獲得每一個請求頭,否則,你會得到一個501響應。 (在上面的屏幕截圖中,'accept,maxdataserviceversion. dataserviceversion,authorization')