メンバーシップフレームワーク

メンバーシップフレームワーク

メンバーシップフレームワークとは、asp.netによるログイン認証機能のフレームワーク

 

メンバーシッププロバイダークラス

認証機能を持つメンバーシッププロバイダークラスをModelフォルダ内に実装する。

MembershipProviderクラスを継承したCustomMembershipProviderクラスを作成し、抽象メソッドを実装する

f:id:daishi-sakai:20210814093929p:plain

CustomMembershipProviderクラス

ユーザー名とパスワードを受け取り正しいかをbool型で返すメソッドValidateUser()を実装する

 

f:id:daishi-sakai:20210814094503p:plain

ValidateUserメソッド

認可を表すロールプロバイダークラスCustomRoleProviderクラスを実装する。

RoleProviderクラスを継承し、抽象メソッドを実装する。

f:id:daishi-sakai:20210814094658p:plain

CustomRoleProviderクラス

GetRolesForUser()

指定されたユーザーが持つロールをstring[]型で返すメソッド

f:id:daishi-sakai:20210814095011p:plain

GetRolesForUserメソッド

IsUserInRole()

引数で与えられたユーザーが、引数で与えられたロールの権限を所持しているかbool型で返すメソッド

f:id:daishi-sakai:20210814095415p:plain

IsUserInRoleメソッド

 LoginViewModeloの作成

ViewModelとは、実際のデータベースに登録されているデータと画面上でのみ用いるデータの差異を解消するためのデータトランスファークラスを指す。

ユーザー名とパスワードを入力するログイン画面を構成する。

それぞれ必須項目であるため[Required]を設定する。

また、パスワードは[DataType(DataType.Password)]とすることで入力文字を*********形式で表示させる。

f:id:daishi-sakai:20210815110203p:plain

LoginViewModel

 

LoginController 

LoginViewModelクラスから受け取ったユーザー名、パスワードを処理するコントローラークラスを実装する。

 

[AllowAnonymous]によりログイン認証前にアクセスできるように設定する。

ログイン認証のメソッドを持つCustomMembershipProviderクラスのインスタンスを生成する。

f:id:daishi-sakai:20210815111404p:plain

LoginControllerクラス

ログイン情報が入力されたとき(POST)を処理する。
CSRF対策として、[ValidateAntiFogeryToken]アノテーションを付加する。

また、入力情報に対して、ValidateUser()を用いてユーザー名とパスワードが正しいかチェックする。

正しい場合、FormsAuthentication.SetAuthCookie()を用いる。

指定したユーザー名に対して、認証チケットを発行しCookieに保存する。

f:id:daishi-sakai:20210815112352p:plain

LoginControllerクラス2

Login用のView 

Login用のViewを作成し、ログイン失敗時のエラーメッセージをViewBagで表示する。

f:id:daishi-sakai:20210817063601p:plain

ViewBag

共通レイアウトにログイン時にサインアウトできるようリンクを設定する。

Request.IsAuthentificated:ログインしているとき、はtrueの状態になる。ログインしていないとき、falseの状態になる。

@Html.ActionLink("表示名", "アクションメソッド", "コントローラ名")

コントローラ名のアクションメソッドへ遷移する。

f:id:daishi-sakai:20210817063815p:plain

共通レイアウトにSignOutを実装する

 

Authorizeを設定することでTodoesControllerにはサインインしている状態ではないとアクセスできなくなる。

f:id:daishi-sakai:20210821110126p:plain

Authorize