新しい認証の仕組み ー ASP.NET Identity
VS2013 では One ASP.NET という掛け声のもと、 ASP.NET の各種テンプレートが変更されました。
この変更で認証の仕組みがいままでのメンバーシップから ASP.NET Identity へと変わっています。
ASP.NET Identity がどういったものか、というのは次のサイトからたどっていろいろ見てもらうのがよいのですが。。。
まぁ、これで終わっちゃうのもなんなので、ざっくり紹介してみます。
上記のサイトでの紹介もほとんど ASP.NET MVC のテンプレートなので、ここではわざと WebForms としてプロジェクトを構築して確認することにします。
右側に「認証: 個人ユーザー アカウント」と設定されています。
「認証の変更」ボタンをクリックすることでこの設定を変えることができます。
ここでは変更せずに、個人ユーザーアカウントのままプロジェクトを作成します。
#というか、他のパターンをまだ検証していません。
さて、プロジェクトができたらルートフォルダの Web.confg の内容を確認してみましょう。
authentication mode は Forms ではなく ”None” です。
また、メンバーシップ、プロファイル、ロールはみんな「無効」です。
これで従来のメンバーシップが利用されていないことははっきりします。
ついでに、 Account フォルダの下にある Web.config の内容も確認してみましょう。
これは Manage.aspx というファイルにたいし、ログインしている必要がある、という従来どおりの設定ですね。
ここで、メンバーシップは使っていないものの、許可/拒否の設定は従来どおり、というのがわかります。
では実際にユーザー登録を行ってみましょう。
アプリケーションを実行し、登録リンクをクリックします。
ユーザーの登録画面が表示されるので、適当なユーザーを作成します。
ユーザー登録については、同じユーザー名がいる場合はエラーになります。
また、英数字以外は登録できません。
「.」をいれるだけでエラーになります。当然日本語も。
日本語はまぁいいんですけど、メールアドレスをユーザー名として使うこともできないんですね。
このあたりは拡張したくなるかも。。。
ユーザー登録が無事に終わると、ユーザー名が表示され、ログオフリンクが表示されます。
この状態でユーザー名をクリックすると、パスワードが変更できるようになっています。
ログオフしてからログインリンクをクリックすると、下記のようなログイン画面が表示されます。
登録したユーザーでログインできることを確認しておきましょう。
で、テンプレートで認証関係で実装されているのはこの程度のようです。
パスワードリマインダとかはありません。
まぁ、メールアドレス登録するところがないので、リマインダメールとか送れないわけですが。
こんな状態で ASP.NET Identity を使うのに意味があるの?と思われそうですが、SNSを使ったログインが可能になる、という大きな利点があります。
App_Start フォルダ内の Startup.Auth.cs ファイルを表示します。
上記のように app.UseGoogleAuthentication(); の行を有効にしましょう。
Google アカウント以外では Microsoft アカウント、Twitter、Facebook でのログイン機能が用意されています。
その中で Google アカウントはなんの設定もなく使えるので、これで試してみます。
アプリケーションを実行し、ログインリンクをクリックします。
右側に Google によるログインボタンが表示されます。
このボタンをクリックすると、Google アカウントのログイン画面が表示されます。
ここで Google アカウントでログインすると、利用する情報の許可のページが表示されます。
関連付けフォームが表示されるので、ユーザー名を入力します。
これで登録は完了します。
次回以降、Google アカウントでのログイン情報が保持されている間は Google によるログインボタンをクリックするだけでログインできます。
ログイン情報が消えた場合も、再度 Google でログインすることで関連づけしたユーザーとしてログインされることになります。
さて、登録したユーザーのデータはどこにあるのかみてみましょうか。
ソリューションエクスプローラーで「すべてのファイルを表示」の状態にすると、 App_Data フォルダ内に mdf ファイルが作成されていることがわかります。
この mdf ファイルをダブルクリックするとサーバーエクスプローラーにデータベースの情報が表示されますので、ここからテーブルの定義や中身を見ることができます。
ASPNET.mdf のころと比べるとテーブル構成も非常にシンプルになっていて、必要最低限の情報しか持たない感じですね。
メールアドレスの登録もない、というのは前に書きましたが、複数回ログインに失敗したときのアカウントロック等の機能もなさそうです。
このあたりは必要であれば自分で実装しろ、ということなのでしょう。
テンプレートの標準では、 ASP.NET Identity は EntityFramework を利用する形で実装されており、Entity Framework Migration の機能をつかうと拡張も簡単、という話が次のページに紹介されています。
Customizing profile information in ASP.NET Identity in VS 2013 templates
このあたりをからめて、すぐに必要になりそうな機能をどう実装したらいいか、これからまとめてみたいと考えてます。
さてさて、どうなるかな?