これが私のシナリオです:
フォーム認証を使用するWebサイトをIIS(7.5)でセットアップしました。そのWebサイト内に、WebDAV共有として使用しているサブフォルダーがあります。WebDAVリクエストを監視するカスタムHTTPモジュールがあり、カスタム認証のレベルとしても機能します。このカスタム認証は、ユーザーがドライブをWebDAV共有にマップしようとしたときに、最初にHTTP 401チャレンジを送信してユーザーの資格情報を取得し、次に資格情報がサーバー側のBasic-Authヘッダーから解析されます。問題は、FormsAuthenticationがオフになっている場合にのみBasic-Authヘッダーが送信されることです。
さらに、通常、HTTPモジュールがAuthヘッダーを見つけられない場合、401チャレンジが送信されます(Forms Authがオフになっている場合、ユーザーに資格情報の入力を求めます)。ただし、Forms Authをオンにしても、HTTPモジュールは引き続き実行されて401チャレンジを送信しますが、Forms Authが優先されているように見えるため、Fiddlerでは次の宛先へのリダイレクトを明確に確認できます。
/Account/Login.aspx?ReturnURL=MySubFolder
カスタム認証のポイントは、ドライブをWebDAV共有にマッピングするときに、ユーザーが自分のサイトにログインできるようにすることです。彼らのWebサイトの資格情報を取得し、認証してから、ディレクトリの内容を表示したいと思います。
だから私の質問は:
フォーム認証が有効になっているWebサイト内のサブフォルダーまたは仮想ディレクトリでフォーム認証を無効にする方法はありますか?
Webサイトで新しいアプリケーションを作成し、そこにサブフォルダーを配置して、アプリケーション自体でForms Authを無効にすることで、これを回避できることを確認しましたが、可能であれば、そうしないことをお勧めします。
私が試したすべての結果(以下にリストされています)は、ドライブをHttp://localhost/MySubFolder
フォーム認証に引き継がれ(少なくともそれが起こっていると思います)、リダイレクトされるようにマップするという私の要求につながりました/login.aspx?ReturnUrl=MySubFolder
(Fiddlerに示されています)。
これが私が試したことです:
1)別のWeb.configをMySubFolder
:に追加しました
<configuration>
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</configuration>
2)次のような<location>
タグをルートレベルのWeb.configに追加しました。MySubFolder
<location path="MySubFolder">
<system.web>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</location>
3) IISで機能の委任を更新することを検討しました。
個人的には、上記の解決策に疑問を持っていました。私が読んだことから、これらの解決策は、フォーム認証を有効にしたまま、すべてのアクセスを許可することを目的としているためです。サブフォルダでフォーム認証を実際に無効にする方法が必要です。これは可能ですか?
また、私のサブフォルダーは仮想ディレクトリである可能性がありますが、いずれかの方法で必須ではないことにも注意してください。そのフォルダでFormsAuthを無効にする方法が必要です。
リクエストに応じて、私のWeb.configファイル(サイトレベル):
<?xml version="1.0"?>
<configuration>
<connectionStrings>
<add name="MyConnString" connectionString="Persist Security Info=True;Initial Catalog=MyDB;Data Source=MyServer;User ID=UserName;Password=xxxxxxxxxx;MultipleActiveResultSets=True;"/>
</connectionStrings>
<system.web>
<compilation debug="true" strict="false" explicit="true" targetFramework="4.0" />
<authentication mode="Forms">
<forms loginUrl="~/Account/Login.aspx" timeout="2880" />
</authentication>
</system.web>
<system.webServer>
<modules runManagedModulesForWebDavRequests="true" runAllManagedModulesForAllRequests="true">
<add name="CustomWebDAVModule" type="CustomWebDAVModule"/>
</modules>
</system.webServer>
</configuration>