メール連携機能の概要
前回から紹介を始めたASP.NET Identity 2.0の新機能には、メールと連携してセキュリティを強化する仕組みがいくつかあります。主なものは次の3つです。
- アカウントの確認: ユーザーを登録する前に、メールで確認を行います。
- パスワードのリセット: メールでパスワードのリセットを行うためのページへのリンクを送付します。
- 二段階認証: 登録したパスワードの他に、メールやSMSで送った一時パスワードを使い、二段階で認証を行います。
今回と次回は、この中から「アカウントの確認」を取り上げ、どのようにメールと連携するのか詳しく紹介します。「パスワードのリセット」「二段階認証」についても順次紹介する予定ですので、楽しみにお待ちください。
なお、今回のサンプルは8月4日にリリースされた「Visual Studio 2013 Update 3」で新たに「ConfirmationWebFormApp」プロジェクトを作成していますので、事前にUpdate 3をインストールしておいてください。
8月4日にASP.NET Identityの最新バージョンである2.1.0がリリースされました。その主な新機能は次のとおりです。
- SignInManagerクラスの導入: 二段階認証やアカウントのロックアウト機能を簡単に使用するための、ログイン(サインイン)処理をラップするクラスです。前回の記事で紹介したアカウントのロックアウトに必要な雑多な実装が、このクラスを使用することで不要になります。
また、同日ASP.NET Identity 2.1.0に対応した新たなテンプレートを取り込んだVS2013 Update 3がリリースされています。新テンプレートの主な変更点は以下の通りです。
- 二段階認証の骨組の追加: 先述のSignInManagerクラスを使用し、パスワード以外にワンタイムパスワード等を必要とする「二段階認証」を行うための骨組が組み込まれました。この機能については、本連載の後の回で取り上げる予定です。
- アカウントロックアウトの骨組の追加: 二段階認証と同様SignInManagerクラスを用いたアカウントロックアウトの骨組が組み込まれています。こちらについては次回の記事で紹介します。
詳しくは以下の記事を参考にしてください。
アカウントの確認とは
それではまず「アカウントの確認」機能について、もう少し詳しく紹介していきます。「アカウントの確認」とは、ユーザー登録の際に本当に登録するかどうかメールを送信し、確認を行う機能です。その主な目的はセキュリティの強化で、次のようなものがあります。
- ユーザーが存在することの確認
- 正規のEメールアドレスであることの確認
- スパムなどによる登録申請でないことの確認
アカウントの確認の処理イメージは以下のようになります。
(1)ユーザー登録
ユーザー登録ページにアクセスし、メールアドレスを入力してユーザーの登録を行います。
(2)確認メール送信
ユーザー登録処理後に、入力されたメールアドレス宛に「確認メール」を送ります。この確認メールには、アカウントを確認するための「確認トークン」を含んだ「アカウント確認ページ」へのリンクが含まれています。
なお、この時点でユーザー情報は登録されますが、「未確認」状態であるためログインはできません。
(3)確認処理
ユーザーは(2)で送付された確認メールに含まれるリンクから、アカウント確認ページを表示します。
アカウント確認ページでは「確認トークン」の検証を行い、妥当なものであればユーザーを「確認済」状態に変更します。したがって、メールで送られたリンク以外からアカウント確認ページを表示しても、確認トークンが含まれていない、もしくは妥当でないため、アカウントの確認は失敗します。
(4)ログイン
アカウントの確認が成功するとユーザー情報が「確認済」状態になり、ログインできるようになります。
今回は(2)の確認メールを送信するまでを実装していきます。