2009-02-24 15 views
5

私が開発しているウェブサイトでは、ユーザーは3レベルでログインできます。ASP.NETでカスタムログオン/認証システムを開発する最良の方法

レベル1 - 彼らは、自分のメールアドレスを登録し、確認メールを受信し、そのようにログイン -

レベル2にログインしていません。

レベル2 - ユーザー名/パスワードでログインし、Webサービスに送信します。 Webサービスが "成功したログイン"結果を返すと、WebサービスはWebサイトにログインします。

ログインレベルによっては、一部のWebページが利用可能になり、その他のWebページは制限されます。

私の質問は、これをどのように開発すればよいですか?

私はASP.NET MVCでプロジェクトをやっています。

自分のAccountControllerをコード化すればよいですか? .NETフォーム認証を使用する必要がありますか?フォーム認証のメリットは、.NETコードで手動で行うだけではどうですか?

ログインを成功させた場合は、ログインしたユーザーをセッション変数に保存するだけです。これに何か悪影響を及ぼすか、私がやっていることに対しては問題ありませんか?

+0

あなたが見ている認証方法は何ですか? – Suroot

+0

さて、私は、 "emailaddress"をパラメータとして受け入れる "LogIn"メソッドを使って、独自のAccountControllerをゼロから作成しようとしています。 emailaddressがDB内にある場合、セッション変数 "CurrentUser"をそのDBレコードに設定します。 このようにしない理由はありますか? – Jonathan

答えて

1

独自の認証システムのローリングに対して強くお勧めします。 .netフォーム認証はあまりにも簡単です。なぜ自分でそれを構築する時間を無駄にしますか?認証システムには多くの落とし穴があります。あなたがMSでない限り、本当にビルドしてテストするリソースがありません。

ユーザーが見ることができるページを特定することは承認であり、確実に独自の方法でコードを作成することができます。私は.netで利用可能なアイデンティティ/プリンシパルのインターフェイスを調べて、 "IsInRole"メソッドを必要に応じて変更することをお勧めします。

セッションはセキュリティにとって本当に良いことではありません。 Webファームのシナリオではうまく機能せず、アプリケーションプールがリサイクルすると決めたときに、すべてのユーザーがログアウトします。 .net forms authはデフォルトでCookieを使用します。

+0

私は、ASP.NETメンバーシップの仕組みを理解しようとするよりも、自分のシステムを公開する方がずっと簡単だと言います。さらに、私は文字通り何百もの不要なテーブル、ASP.NETメンバシップをサポートするビューとストアドプロシージャをデータベースに常駐させたくありません。 – User

0

あなたの場合は、簡単なフォーム認証の使用をお勧めします。 (How to: Implement Simple Forms Authentication参照)。単純なLoginControllerがこれを処理できます。

セッションにユーザープロファイルデータを格納することに関して何も「間違っていません」が、これはWebサイトの負荷を分散する必要がある場合にスケーラビリティの問題につながります。推奨される方法は、カスタムRoleProviderを実装することです。 (Implementing a Role Providerを参照してください)

おそらく、ユーザーの現在の役割をチェックしてアクセス権の種類を確認するBaseControllerクラスを持つことができます。

1

あなた自身のカスタムのメンバーシップ/認証システムを作成する最良の方法は、実際には.NETの組み込みMembershipProviderクラスを使用し、そこから独自のカスタムクラスを派生させることです。.NETフレームワーク内でSystem.Web.Security.MembershipProvider(およびRoleおよびProfileクラスも)クラスを継承して独自のメンバシッププロバイダを作成し、独自の実装を提供できます。このようにして、信頼性の高い「基本フレームワーク」を使用して認証および認可システムを構築する利点が得られます。

カスタムメンバシッププロバイダをフレームワーク独自の基本クラスで派生させることで、web.configファイル内の宣言的な認可など、組み込みのASP.NETメンバシップシステムの多くの優れた機能を活用できます。組み込みのASP.NET認証チケット。私は非常によく似た質問hereに答えました。

私は、ASP.NETの標準の組み込みメンバーシッププロバイダでは、ユーザーがWebサイトに登録するのは簡単だが、自分のアカウントをすぐに確認するのではなく、ウェブサイトへのアクセスを許可する前にクリックしなければならない「検証リンク」を含む電子メールをユーザーに送信する必要があります。これはASP.NET MembershipProviderクラスの標準機能ではありませんが、実装は比較的簡単です。

ここで見つけることができます(ログインを許可する前に、電子メールを介してアカウントを有効に1を含む)ASP.NETのメンバーシップ、ロールおよびプロファイルプロバイダに関するスコット・ミッチェル記事の偉大なシリーズがあります:

Examining ASP.NET 2.0's Membership, Roles, and Profile

は、

これは、ASP.NETプロバイダから独自のカスタムプロバイダを派生させる場合に役立ちます。

関連する問題