5

フォーム認証をサイト全体に実装する既存の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> 
+3

私はすべてのパスは、「サービス/ MyService.asmx」ではない「〜/サービス/ MyService.asmx」の形になっているweb.configファイル内の場所タグを使用していたたびに、指定しようとしていますそれはチルダ - スラッシュなしで? –

+0

それはそれでした。私は3つの異なるバージョンを試したことを誓うことができました。今回私はブラウザを閉じて、あなたのソリューションは完璧に動作しました。 – dividius

答えて

4

、のようなもの:私のweb.configファイル内の関連するセクション次のようになり

<location path="services"> 
     <system.web> 
     <authorization> 
      <allow users="*"/> 
     </authorization> 
     </system.web> 
</location> 

しかし、あなたはそれがうまくいかないと言って、web.configファイルをサービスフォルダに入れてフォーム認証を無効にし、そのファイル内のすべてのユーザーを許可しようとしましたか?

+0

上記のように、私がした間違いは、単に "サービス"の代わりにパスの "〜\ Services"を指定することでした。 – dividius

+0

うれしいことですが、恥ずかしそうなasp.netは〜を使用できる場所で矛盾しています/いくつかの機会に –

0

アクセス制御を匿名に設定して、サービスフォルダに(上書きする)web.configファイルを作成することもできます。

0

私のために働いたのは、すべてのユーザーが自分のWebサービスが置かれているフォルダにアクセスできるようにすることでした。 まず、そのフォルダに構成ファイルを追加し、以下のコードを挿入してすべてのユーザーを許可します。

<authorization> 
     <allow users="*"/> 
     </authorization> 
    </system.web> 
関連する問題