WebFormsとMVCページの両方を含む大規模なエンタープライズアプリケーションがあります。変更したくない既存の認証と承認の設定があります。
WebForms認証は、web.configで構成されます。
<authentication mode="Forms">
<forms blah... blah... blah />
</authentication>
<authorization>
<deny users="?" />
</authorization>
これまでのところかなり標準的です。この大きなアプリケーションの一部であるRESTサービスがあり、この1つのサービスの代わりにHTTP認証を使用したいと思います。
したがって、ユーザーがRESTサービスからJSONデータを取得しようとすると、HTTP401ステータスとWWW-Authenticate
ヘッダーが返されます。彼らが正しく形成されたHTTPAuthorization
応答で応答する場合、それは彼らを受け入れます。
問題は、WebFormsがこれを低レベルでオーバーライドすることです。401(未承認)を返すと、302(ログインページへのリダイレクト)でオーバーライドされます。これはブラウザでは問題ありませんが、RESTサービスには役に立ちません。
web.configの認証設定をオフにして、「rest」フォルダーをオーバーライドしたい:
<location path="rest">
<system.web>
<authentication mode="None" />
<authorization><allow users="?" /></authorization>
</system.web>
</location>
許可ビットは正常に機能しますが、認証行(<authentication mode="None" />
)により例外が発生します。
allowDefinition='MachineToApplication'として登録されているセクションをアプリケーションレベルを超えて使用するとエラーになります。
私はこれをアプリケーションレベルで構成していますが、これはルートweb.configにあり、そのエラーはサブディレクトリのweb.configsにあります。
サイトの残りのすべてがWebForms認証を使用し、この1つのディレクトリが何も使用しないように認証をオーバーライドするにはどうすればよいですか?
これは別の質問に似ています:ASP.NET MVCを使用したjsonリクエストの401応答コードですが、同じ解決策を探していません-WebForms認証を削除して新しいカスタムコードをグローバルに追加したくないので、はるかにあります多くのリスクと関連する作業に。構成内の1つのディレクトリのみを変更したい。
アップデート
単一のWebアプリケーションをセットアップしたいので、すべてのWebFormsページとMVCビューでWebForms認証を使用したいと思います。1つのディレクトリで基本HTTP認証を使用したい。
私が話しているのは認証ではなく、認証であることに注意してください。REST呼び出しにHTTPヘッダーのユーザー名とパスワードを含め、WebFormとMVCページに.Netからの認証Cookieを含める必要があります。いずれの場合も、承認はDBに対して行われます。
WebForms認証を書き直して、自分のCookieをロールバックしたくありません。HTTPで承認されたRESTサービスをアプリケーションに追加する唯一の方法はばかげているようです。
アプリケーションや仮想ディレクトリを追加することはできません。1つのアプリケーションとして使用する必要があります。