【问题标题】:Using JayData how do you basic authenticate to OData?使用 JayData 如何对 OData 进行基本身份验证?
【发布时间】:2012-12-14 05:23:13
【问题描述】:

我按照此处http://jaydata.org/blog/jaydata-1.0.5-is-here-with-authentication-support-and-more 的指示指定了用户和密码 但我一直收到 401。有什么想法吗?

【问题讨论】:

  • 您使用什么技术来实现服务器?像 WCF 或 LightSwitch 或 JayStorm?使用 WCF,您还必须调整 IIS 以获得基本身份验证支持。请尝试使用 Chrome 的网络选项卡查看流量,在 OData 请求中,您应该会看到一个授权标头。

标签: odata jaydata


【解决方案1】:

你能用 fiddler 或 wireshark 捕获流量吗?基本身份验证确实有效....

【讨论】:

    【解决方案2】:

    我也有同样的问题。我关注了博文 (http://jaydata.org/blog/jaydata-1.0.5-is-here-with-authentication-support-and-more) 并将 basicc auth 的凭据应用于上下文初始化。

    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 发送授权标头吗?

    【讨论】:

      【解决方案3】:

      好的,

      我找到了解决上述问题的方法。问题是使用 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 属性“方法”,所以我的 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.dataserviceversion, authorization')

      【讨论】:

        猜你喜欢
        • 2011-03-30
        • 2015-08-12
        • 2017-06-13
        • 2013-05-30
        • 2017-09-18
        • 1970-01-01
        • 2016-07-01
        • 2018-08-28
        • 1970-01-01
        相关资源
        最近更新 更多