1

これが私たちのシナリオです:

  • ソリューションS1には、フォーム認証を使用して保護されたMVC3アプリケーション「MVC3ABC」があります(現在、ユーザーの詳細は初期開発用のweb.configにありますが、まもなくSQL Serverデータベースに含まれる予定です)。

  • MVCコントローラーC1は、ソリューションS1の別のASP.NETWebプロジェクトの下に.svcファイルがあるWCFサービスW1を呼び出します。この場合、WCFサービスは、ログインしている特定のユーザーを知る必要はなく、アクセスしている認証済みユーザーであるだけです。

  • MVC View V1は、別のソリューションS2の別のAST.NETWebプロジェクトの下に.svcファイルがあるWCFサービスW2を呼び出すSilverlight4アプリSLV1をホストしています。この場合、WCFサービス、どのユーザーがMVCサイトにログインしているかに応じて異なるデータベースからデータを取得するため、どの特定のユーザーがログインしているかを知る必要があります。

つまり、基本的に、2つのWCFサービスへのアクセスは、MVCアプリケーションを介して既に認証されたユーザーがMVCサイトから実行できることです。また、W2サービスの場合は、それがどちらのユーザーであるかを知る必要があります。MVCサイト外のWCFサービスへのアクセスも認証する必要があるか、機能しないようにする必要があります(WCFサービスへの匿名アクセスは許可されていません)。

この問題を解決するための標準的なアプローチはありますか?この種の動作を見ることができるサンプルプロジェクトを知っている人はいますか?

いくつかの追加の詳細-VisualStudio2012 RC、.NET 4.5、およびIIS7を使用しています。

ありがとう

4

1 に答える 1

1

あなたが達成しようとしているのは、MVC アプリケーションと WCF サービス全体でフォーム認証を共有することだと思います。あなたはそれを行うことができます:)

アイデアは、MVC アプリケーションから WCF サービスに Cookie を共有する必要があるということです。

以下は、これを行う上で注意する必要があることです。

  1. MVC サービスと WCF サービスは、web.config で同じフォームと machineKey セクションを使用する必要があります。ここを参照してください。つまり、WCF サービスもフォーム認証を使用する必要があり、それらの 3 つすべてが同じマシン キーを共有して、Cookie を共有する必要があります。

  2. もちろん、WCF サービスは asp.net 互換モードで実行する必要があります。

  3. WCF サービスを呼び出すときは、フォーム認証 Cookie を送信メッセージ ヘッダーに手動で追加する必要があります。ここを参照してください。

編集:

OPのコメントに基づいて、回答を更新しています。

上記のソリューションは、WCF サービスを MVC のみで使用し、他のクライアントでは使用しない場合に適しているようです。しかし、WCF サービスを MVC プロジェクト以外の別のクライアントでも使用したい場合、クライアントは Cookie を作成して要求に追加する必要があるため、困難な時期に直面します (これが可能かどうかはわかりません!)。

したがって、もう少し洗練されたソリューションは、WCF サービスを自己完結型にすることであり、認証/承認メカニズムを個別に統合することを意味します。1 つの方法は、ASP.NET メンバーシップ プロバイダーを WCF サービスに簡単に統合できることです。このようにして、認証は WCF サービス側で個別に行われます。その他の利点は、サード パーティのクライアントまたは他のアプリケーションが、プロキシ経由で資格情報を渡す WCF サービスを簡単に使用できることです。

したがって、WCF サービスで asp.net メンバーシップ プロバイダーを構成する方法を示すリンクがあります。

于 2012-07-13T12:51:16.837 に答える