Asp.net-mvc-security
ASP.NET MVC-セキュリティ
この章では、アプリケーションにセキュリティ機能を実装する方法について説明します。 また、ASP.NETに含まれており、ASP.NET MVCから使用できる新しいメンバーシップ機能についても説明します。 ASP.NETの最新リリースでは、次の方法でユーザーIDを管理できます-
- 雲
- SQLデータベース *ローカルWindowsアクティブディレクトリ
また、この章では、ASP.NETの一部である新しいIDコンポーネントと、ユーザーとロールのメンバーシップをカスタマイズする方法についても説明します。
認証
ユーザーの認証とは、ユーザーの身元を確認することです。 これは本当に重要です。 明らかな理由により、認証されたユーザーにのみアプリケーションを提示する必要がある場合があります。
新しいASP.Net MVCアプリケーションを作成しましょう。
OKをクリックして続けます。
新しいASP.NETアプリケーションを起動するとき、プロセスの手順の1つは、アプリケーションのニーズに合わせて認証サービスを構成することです。
MVCテンプレートを選択すると、[認証の変更]ボタンが有効になっていることがわかります。
これは、[新しいプロジェクト]ダイアログに表示される[認証の変更]ボタンで行います。 デフォルトの認証は、個人ユーザーアカウントです。
認証オプション
[変更]ボタンをクリックすると、次の4つのオプションのダイアログが表示されます。
認証なし
最初のオプションは認証なしです。このオプションは、訪問者が誰であるかを気にしないWebサイトを構築する場合に使用されます。
誰でも利用でき、すべての人がすべてのページとして接続します。 これは後からいつでも変更できますが、認証なしオプションは、Webサイトにアクセスするユーザーを識別する機能がないことを意味します。
個々のユーザーアカウント
2番目のオプションは個人ユーザーアカウントであり、これはユーザーがWebサイトにアクセスできる従来のフォームベースの認証です。 登録、ログインの作成が可能です。デフォルトでは、ユーザー名はいくつかの新しいASP.NET ID機能を使用してSQL Serverデータベースに保存されます。
パスワードもデータベースに保存されますが、最初にハッシュされます。 パスワードはハッシュ化されているため、データベースにあるプレーンテキストのパスワードを心配する必要はありません。
このオプションは通常、ユーザーのIDを確立するインターネットサイトで使用されます。 ユーザーがサイトのパスワードを使用してローカルログインを作成できるようにすることに加えて、Microsoft、Google、Facebook、Twitterなどのサードパーティからのログインを有効にすることもできます。
これにより、ユーザーは自分のLiveアカウントまたはTwitterアカウントを使用してサイトにログインでき、ローカルユーザー名を選択できますが、パスワードを保存する必要はありません。
これは、このモジュールで時間を費やすオプションです。個々のユーザーアカウントオプション。
仕事と学校のアカウント
3番目のオプションは、組織アカウントを使用することです。これは通常、Active Directoryフェデレーションサービスを使用するビジネスアプリケーションに使用されます。
Office 365をセットアップするか、Azure Active Directory Servicesを使用し、内部アプリとクラウドアプリにシングルサインオンします。
また、Azureベースの場合、アプリをWindows Azure管理ポータルに登録する必要があるため、アプリIDを提供する必要があります。アプリIDは、登録される可能性のあるすべてのアプリケーションの中でこのアプリケーションを一意に識別します。
Windows認証
4番目のオプションはWindows認証で、イントラネットアプリケーションに適しています。
ユーザーはWindowsデスクトップにログインし、同じファイアウォール内にあるアプリケーションに対してブラウザーを起動できます。 ASP.NETは、Active Directoryによって確立されたユーザーのIDを自動的に取得できます。 このオプションは、サイトへの匿名アクセスを許可しませんが、これも変更可能な構成設定です。
フォームベースの認証を見てみましょう。名前は個人ユーザーアカウントです。 このアプリケーションは、ユーザー名とパスワード、古いパスワードをローカルのSQL Serverデータベースに保存し、このプロジェクトが作成されると、Visual StudioはNuGetパッケージも追加します。
次に、このアプリケーションを実行します。このアプリケーションに初めてアクセスすると、匿名ユーザーになります。
まだログインできるアカウントがないため、このサイトで登録する必要があります。
[登録]リンクをクリックすると、次のビューが表示されます。
メールIDとパスワードを入力します。
登録をクリックします。 これで、アプリケーションはあなたを認識します。
あなたの名前を表示することができます。 次のスクリーンショットでは、こんにちは、muhammad.waqas @ outlook.comを見ることができます! 表示されています。 これをクリックすると、パスワードを変更できるページへのリンクになります。
また、ログオフ、シャットダウン、再起動、1週間後に戻ることができ、以前に使用した資格情報でログインできるはずです。 ログオフボタンをクリックすると、次のページが表示されます。
[ログイン]リンクをもう一度クリックすると、次のページに移動します。
同じ資格情報で再度ログインできます。
この点に到達するために、多くの作業が舞台裏で行われています。 ただし、私たちがやりたいのは、各機能を調べて、このUIがどのように構築されるかを確認することです。 ログオフとログインプロセスの管理とは何ですか? この情報はデータベースのどこでソートされますか?
いくつかの簡単な基本から始めましょう。 最初に、このユーザー名がどのように表示されるかを確認します。 ソリューションエクスプローラーのView/Sharedフォルダーから_Layout.cshtmlを開きます。
共通のナビゲーションバー、アプリケーション名、メニューがあり、_loginpartialと呼ばれるレンダリングされている部分ビューがあります。 実際には、ユーザー名または登録名とログイン名を表示するビューです。 したがって、_loginpartial.cshtmlも共有フォルダーにあります。
上記のように、if/elseステートメントがあります。 リクエストが認証されていないため、ユーザーが誰なのかわからない場合、このビューには登録リンクとログインリンクが表示されます。 ユーザーは、リンクをクリックしてログインまたは登録できます。 これはすべて、アカウントコントローラーによって行われます。
ここでは、ユーザー名を取得する方法を確認します。これはRequest.IsAuthenticated内にあります。 User.Identity.GetUserNameの呼び出しを確認できます。 ユーザー名を取得します。この場合は「muhammad.waqas@outlook.com」です
承認
認証されていないユーザーから保護したい何らかの情報があるとしましょう。 そのため、ユーザーがログインしている場合にのみ、その情報を表示する新しいコントローラーを作成しましょう。
コントローラーフォルダーを右クリックし、追加→コントローラーを選択します。
MVC 5コントローラーを選択します-コントローラーを空にして、「追加」をクリックします。
SecretControllerという名前を入力し、「追加」ボタンをクリックします。
次のコードに示すように、内部に2つのアクションがあります。
このアプリケーションを実行すると、次のスクリーンショットに示すように、認証なしでこの情報にアクセスできます。
したがって、認証されたユーザーのみがSecretアクションメソッドにアクセスでき、PublicInfoは認証なしで誰でも使用できます。
この特定のアクションを保護し、認証されていないユーザーがここに到着しないようにするには、Authorize属性を使用できます。 他のパラメーターのないAuthorize属性は、ユーザーのIDが既知であり、匿名ユーザーではないことを確認します。
このアプリケーションを再度実行して、同じURL* http://localhost:54232/Secret/Secret *を指定します。 MVCアプリケーションは、アプリケーションの特定の領域にアクセスできないことを検出し、ログインページに自動的にリダイレクトします。ログインページでは、ログインしてアプリケーションのその領域に戻ろうとする機会が与えられます。あなたが拒否された場所。
戻りURLで指定されていることがわかります。これは、ユーザーが正常にログインした場合に/secret/secretにリダイレクトすることをこのページに本質的に伝えます。
資格情報を入力し、[ログイン]ボタンをクリックします。 そのページに直接移動することがわかります。
ホームページに戻ってログオフすると、シークレットページにアクセスできません。 再度ログインするように求められますが、/Secret/PublicInfoにアクセスすると、認証されていない場合でもそのページを見ることができます。
そのため、ほとんどすべてが認証を必要とするコントローラー内にいるときに、すべてのアクションに認証を配置したくない場合。 その場合、このフィルターをコントローラー自体にいつでも適用でき、このコントローラー内のすべてのアクションではユーザーの認証が必要になります。
ただし、アクションを本当に開きたい場合は、この許可ルールを別の属性AllowAnonymousで上書きできます。
このアプリケーションを実行すると、ログインして/Secret/PublicInfoにアクセスできますが、他のアクションには認証が必要です。
匿名ユーザーは、この1つのアクションのみに許可されます。
Authorize属性を使用すると、特定のユーザーにこのアクションを許可するなど、いくつかのパラメーターを指定することもできます。
このアプリケーションを実行して/secret/secretにアクセスすると、このコントローラーの適切なユーザーではないため、ログインを求められます。