2016-08-23 4 views
1

シナリオ

IIS Webサーバー。 .Net Webサービスではありません。 WebサービスへのPOST。CORS PreFlightが資格情報を送信しない、サーバーが認証されていないユーザーを拒否したい場合

。クロスドメイン方式でWebサービスに接続するネットWebアプリケーション。

要件

Webサーバーは、シングルサインオンで認証されたActive Directoryユーザーが必要とする必要があります。

飛行前のOPTIONSテストでは認証済みのリクエストを受け入れることはできますが、OPTIONSテスト後のPOSTを含む他のリクエストには認証済みのユーザーが必要です。

私は、WebアプリケーションとWebサーバの間に働く成功CORSクロスドメインコールを持っている:私はでてる

。 OPTIONS呼び出しが正常に動作していて、その後のPOST呼び出しが正常に動作していることがわかります。

問題:

OPTIONS呼び出しは資格情報を送信しません。この問題を回避するために、私たちはウェブサイトレベルで匿名ユーザーを許可します。それ以外の場合は、401 Unauthorizedエラーが発生します。

しかし、いったんこれを行うと、POSTでは認証が不要になります。実際には、Webサーバーログには、資格情報が投稿内にまったく送信されていないことが表示されます。それは容認できません。

(a)OPTIONS呼び出しがActive Directory認証情報を送信するように強制するか、(b)Webサーバーが認証されていない非OPTIONS要求をすべて拒否する必要があります。

設定:ソリューション・パスについては

(a)に、私はそれが必要とするためにかなりのゲームです。

ソリューションパス(b)の場合、IIS設定またはweb.configの設定が優先されます。 WebサーバーはPythonで書かれていますが、サーバー上で実際の作業を行うPythonコードを呼び出すc#webserverコードユニットを作成することができます。

アイデア?

答えて

1

問題の要件引用:私は(a)のオプションは、Active Directoryの資格情報を送信するために呼び出す強制または(b)のウェブサーバは、すべてのunauthenticaed非OPTIONS要求を拒否しているいずれかの方法が必要です

を。

ブラウザでは、OPTIONSコールで資格情報を送信するよう強制することはできません。ブラウザはすべてのフライト前の要求OPTIONSでクレデンシャルを省略する必要があります。

言うフェッチ・スペックのCORS-preflight fetch項のアルゴリズムの最初のステップを参照してください:

をこれらのステップを実行し、要求を使用してフェッチCORSプリフライトを実行するには:

  1. は、プリフライトしてみましょうを新しいrequestの方法OPTIONS,のURLはリクエストの最新URLです、イニシエータはリクエストのイニシアチブですタイプは、要求の宛先である、起源はリクエストの原点である、要求のタイプであるインフレータは、リファラはリクエストのリファラあり、かつリファラポリシーは、リクエストのリファラ方針です。 、

    要求 "がomit" である関連クレデンシャルモードを有する "same-origin"、または "include":

すべてrequestcredentials mode運びます。特記しない限り、 "omit"です。

上に引用CORS飛行前のアルゴリズムの最初のステップは、OPTIONS要求の資格モードに値を指定していないので、ブラウザがこれらの要求のためのデフォルト「omit」を使用する必要があります。

これを考えると、クライアント(ブラウザ)側でこれを回避する方法はありませんので、サーバー側で修正する必要があると思います。

+0

ありがとうございました。私が読んだCORSの記事のなかには、資格情報が「デフォルトで」オプション要求で送信されていないと言われています。 IISが匿名オプションの要求のみを受け入れるように設定する方法はありますか? 私たちが仕事のオプションを得るために見つけた唯一の方法は、資格情報が投稿に送られるのを止めることです。 –

+0

申し訳ありませんが、私はIISの設定について何も知りません。私は、クライアント側からこれを回避する方法がないことを明確にするために答えました。 – sideshowbarker

0

これは私が求めた答えではありませんが、それは一部の人々にとって問題を解決できる答えです。

CORSに悩まされていて、イントラネットアプリケーションを実行しようとしているだけの場合は、CORSをオフにする方法があります。

グループポリシーを設定することができます。

Computer Configuration 
-> Administrative Templates 
    -> Windows Components 
     -> Internet Explorer 
     -> Internet Control Panel 
      -> Security Page 
       -> Intranet Zone (and/or Trusted Sites Zone, depending) 
        -> Access data sources across domains 
         (set to Enabled.) 

あなたは、その部分を上に書くことが、私は細部に十分精通していないよなど、それは地元のボックスになっ確認して、ポリシーの設定のSYSの管理タスクを実行する必要があります。ごめんなさい。

関連する問題