使用JayData如何对OData进行基本身份验证?

时间:2012-12-14 05:23:13

标签: odata jaydata

我按照此处的指示http://jaydata.org/blog/jaydata-1.0.5-is-here-with-authentication-support-and-more指定了用户和密码 但我一直在接受401.任何想法?

3 个答案:

答案 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')