フォーム認証をサイト全体に実装する既存のASP.NETアプリケーションがあります。アプリケーションは、複数のインスタンス(例えばcustomer1、customer2、test、devなど)にデプロイされ、インスタンスごとに別々のデータベースがあります。 SSLが有効です。インスタンス設定は、XML設定ファイルを使用して行います。フォーム認証アプリケーション内のASP.NET Webサービス
パブリックWebサービスとして実装したい特定のデータのアップロード/ダウンロードを許可するという新しい要件があります。
私の初期の考えは、アプリケーションのサブディレクトリ(〜/ Servicesなど)に対してフォーム認証を選択的に無効にしてから、SOAPヘッダーなどで認証を行うことでした。
ただし、フォーム認証を選択的に無効にする方法はありません。
質問:これを行う方法はありますか?私は<の位置>タグをWeb設定で試してみましたが、役に立たなかったのです。
そうでない場合は、これを設定する方法についてどのような推奨事項がありますか?
1)私のソリューションで新しい "Services"プロジェクトを作成し、各インスタンスのそのディレクトリに別々のIIS ASP.NETアプリケーションを構成します。 (Pro:インスタンス構成に簡単にアクセスできます。これは将来必要になる可能性があります。Con:関連インスタンスごとの構成の負担)。
2)アプリケーションソリューションから必要なアセンブリを参照し、別のASP.NETアプリケーションとしてホストする、個別の "サービス"ソリューションを作成します。次に、SOAPヘッダーで提供されるUserNameに基づいてdb接続文字列を検索します。 (プロ:IISで設定する単一のアプリケーションCon:インスタンスの設定に簡単にアクセスできません)
3)??
明確化:私はここで答えを見た:Override ASP.NET forms authentication for a single pageしかし、場所タグの使用は助けにはなりません(Webサービスの要求は依然としてリダイレクトされています)。あなたは、サービスのフォルダを指定すると、すべてのユーザーを許可し、私は場所のタグが働くだろうと思うだろう
<system.web>
<authentication mode="Forms">
<forms loginUrl="Login.aspx"/>
</authentication>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>
</system.web>
<location path="~/Services/MyService.asmx">
<system.web>
<authentication mode="None" />
<authorization>
<allow users="*" />
</authorization>
</system.web>
</location>
私はすべてのパスは、「サービス/ MyService.asmx」ではない「〜/サービス/ MyService.asmx」の形になっているweb.configファイル内の場所タグを使用していたたびに、指定しようとしていますそれはチルダ - スラッシュなしで? –
それはそれでした。私は3つの異なるバージョンを試したことを誓うことができました。今回私はブラウザを閉じて、あなたのソリューションは完璧に動作しました。 – dividius