ここで指示されているようにユーザーとパスワードを指定しましたhttp://jaydata.org/blog/jaydata-1.0.5-is-here-with-authentication-support-and-more しかし、401を取得し続けています。何かアイデアはありますか?
3 に答える
Ok、
上記の問題の解決策を見つけました。問題は、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.dataserviceversion, authorization」でした)
私は同じ問題を抱えています。ブログ投稿 ( http://jaydata.org/blog/jaydata-1.0.5-is-here-with-authentication-support-and-more ) に従い、basisc 認証の資格情報をコンテキストの初期化に適用しました。
var ctx = new NutritionDataService.NutritionDbEntities({
name: 'oData',
oDataServiceHost: 'https://localhost:44300/Data.svc',
user: "usr1",
password: "test"
});
しかし、認証ヘッダーが設定されていないようです。
http://i.stack.imgur.com/F228l.png
この投稿の問題 jaydata 基本認証でも同じ結果でアプローチを試みました-認証ヘッダーは送信されません。
jaydata をトリガーして認証ヘッダーを送信する方法を知っている人はいますか?
フィドラーまたはワイヤーシャークでトラフィックをキャプチャできますか? 基本認証は機能します....