2

MVC3アプリケーションは、イントラネットプロジェクトテンプレートを使用する場合はWindows認証を、インターネットプロジェクトテンプレートの場合はフォーム認証を使用できます。私はどちらかを使いたいサイトを持っています。さらに、私は、ユーザーを認証する独自のカスタムタイプの認証を使用する既存のサイトを持っています(認証や役割はなく、IDのみ)。認証のためにレガシーシステムからのデータに加えて、それぞれの機能を使用する必要があるかもしれません。このため、私は自分の認証を抽象化し、それを切り離す方法を決定しようとしています。どのような種類の依存関係注入を構成に基づいて使用したいのですが、この同じサイトを2つの異なる場所に配置し、構成を変更するだけで認証モデル(Windows認証/フォーム認証/カスタム認証)を切り替えることができます。MVC3疎結合認証

現在、MVC3テンプレートプロジェクトを含め、私が扱ってきたすべてのASP.NETアプリケーションは、使用されている認証タイプと密接に結びついているようです。

私はこの箱の外ではあまり考えていませんか?

これが可能ですか、またはこの密結合の理由はありますか?私が持っている

UPDATE 本当の問題は、私は他人のために必要なフォーム認証に対して、一部のユーザーのために使用する必要があり、既存のレガシー認証の間にあります。 LogInフォームが使用されていないため、Windows認証とフォーム認証は実際問題ではありません。しかし、カスタム認証とフォーム認証を検討してください。 LogInフォームはFormsAuthentication、特にSystem.Web.Securityに密接に結合されています。 (Membership.ValidateUser、FormsAuthentication.SetAuthCookieなど)。

FormsAuthenticationとMembershipを使用するのではなく、使用する認証をAccountControllerに挿入したいと思います。

これまでのところ私の問題はより意味がありますか?

答えて

1

実際には密接に結合されていません。テンプレートはあなたをすぐに動かして実行しようとしています。

ASP.NETメンバーシップは、フォームとドメインの両方の認証をサポートします。フォーム認証用に構成された部位、例えば、あなたのようWeb.configにラインが表示されますで

:あなたが変更することができ

<authentication mode="Forms"> 

と:唯一の違いはありません

<authentication mode="Windows"> 

( Windows認証では、にはログインページが必要です)が、最も重要です。 ASP.NETメンバーシップAPIに基づいてコードを記述し、必要なときは特にフォーム認証のみを対象とします。

+0

サイトがローカルで使用されているときにWindows認証を取得しますが、ネットワークに接続していないユーザーはサイトにアクセスする必要があります。この場合、フォーム認証を使用してログインする必要があります。しかし、お客様はログインする必要がありますが、aspnetフォームの認証テーブル、ビューなどを使用していない既存の認証システムを使用します。 –

1

私はクレイグの答えに同意します。私が追加しなければならないのは、web.configであなたが疎結合するように変更できるものについてだけ考えてみることです。理由は、MVCアプリケーションのデプロイメントパッケージを作成するときにweb.config transformsを適用できるためです。

DI/IoCにUnityを使用し、Unityを使用してweb.configで注入依存関係を指定することもできます。 Web.Auth1.configを作成して、ある種類の認証用にアプリケーションを構成し、Web.Auth2.configを使用して別の種類の認証用に構成するだけです。展開すると、ターゲットを選択するだけでVSが正しい構成を構築します。

デプロイメントで使用される認証の種類をソースコードで知る必要がある場合は、web.config appSettingを使用して伝えることができます。この設定は、デプロイ中にweb.configトランスフォームを使用して変更することもできます。

関連する問題