我按照此处的指示http://jaydata.org/blog/jaydata-1.0.5-is-here-with-authentication-support-and-more指定了用户和密码 但我一直在接受401.任何想法?
答案 0 :(得分:0)
你可以用小提琴手或者wireshark捕获流量吗?基本的auth确实有效....
答案 1 :(得分: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发送授权标题吗?
答案 2 :(得分: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属性'method',因此我的BasicAuth模块为每个传入的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>
Access-Control-Allow-Headers必须获取每个请求的标头,否则您将获得501响应。 (在上面的屏幕截图中,它是'accept,maxdataserviceversion.dataseviceversion,authorization')