アーカイブ

Archive for the ‘ASP.NET Identity’ Category

ASP.NET Identity : E-Mail Confirmation

ASP.NET Identity : E-Mail Confirmation

ASP.NET Identity 2.0 で E-Mail Confirmation を実装する方法が説明されています。
ここで使われている SendGrid ですが、Azure の Store から試用版に申し込むとかなりお得に使えますね。

次回は多要素認証について説明してくれるそうなので、こちらも楽しみですね。

カテゴリー:ASP.NET Identity

ASP.NET Identity で外部連携部分のカスタマイズ

ASP.NET Identity : External Login カスタマイズ (claim, scope, access token などの活用)

また自分に必要になったときのためのメモだったりします。
実際、Identity 使うのはともかく外部連携が必要になりそうな案件って、いまのところ考えつかないからなぁ。。。

カテゴリー:ASP.NET Identity

ASP.NET Identity 認証を JavaScript から利用する方法をまとめている記事の紹介

ASP.NET SPA (JavaScript) の Web API 認証 (ASP.NET Identity)

紹介というか自分用のメモですが、Blog にあげておこうと思って忘れてました。
Identity を利用しているとき、このような方法で JavaScript から認証の状況を利用できるようです。
最初に記述されているとおり、実アプリケーションでは、必ず必要になるシナリオです。

まぁ、Identity を利用する機会がいつあるか、というと現時点ではまだ私のまわりでは見えていないわけですが(w
新規アプリの提案するときは使ってみたいなぁ。。。

カテゴリー:.NET, ASP.NET Identity

Identity 2.0 の有用な情報かな?

すみません、自分でまとめたんじゃありません(w

ASP.NET MVC and Identity 2.0: Understanding the Basics

ASP.NET Identity 2.0: Setting Up Account Validation and Two-Factor Authorization

基本的な情報と実際に使うために必要な設定情報とかがまとめられているようです。
自分としては outlook.com をつかったメールの送信方法のサンプルがうれしかったり(w

だいぶ変わったけど、しっかり「使える」ものになっていると感じます。
まずは空のプロジェクトつくって

PM> Install-Package Microsoft.AspNet.Identity.Samples –Pre

とやって、サンプルプログラムを動かしてみるのがよいかと。

ただ、このサンプル、結構コード量が多いんですよね。

Update 2 では Identity 2.0 がテンプレートに入ってくるんだと思うけど、どこまでの機能を持たせたものになるのかなぁ。。。

ASP.NET Identity 2.0.0 が RTM になりました

Announcing RTM of ASP.NET Identity 2.0.0

表題どおりの内容がアナウンスされています。
VS2013のテンプレートで全面的に採用されている ASP.NET Identity ですが、はやくもバージョンが 2.0.0 になりました。
上記記事をみてもらうとわかりますが、1.0 では足りていないと感じていた機能がいろいろ追加されたようです。

  • アカウントのロック
  • 登録確認
  • パスワードリセット
  • ユーザーおよびロールの一覧

ここまできて、やっと使えるかなぁ。。。

名古屋のときはPPTをみてもらえばわかるようにVS2013のテンプレートは実開発に使うにはいまいちじゃね? という話でまとめたのですが、自分として問題と感じていた一番の原因が Identity のアップデートでクリアされるように感じています。
まぁ、まだしっかり見てませんけど。

記事内にあるようにサンプルも提供されていて、ユーザー管理とかまで含めた実装サンプルになっているようです。
これはきちんと解析してみる価値がありそうですね。
Blogネタとしてもよさそうです。
しばらくこの話になるかな?(w

ASP.NET Identity プロファイルの追加

この記事は One ASP.NET Advent Calendar 2013 の10日目の記事です。

デフォルトのテンプレートを利用している場合、ASP.NET Identity ではユーザーの情報として独自のデータ保持できるようにデータベースを拡張することが Entity Framework の Migration の機能を利用することで比較的簡単にできるようになっています。
どのような手順が必要か、は以下の記事で十分わかるかと。

Customizing profile information in ASP.NET Identity in VS 2013 templates

ということで、これで今回の記事は終わり、、、ではあまりに悲しいので、上記記事では ASP.NET MVC でやっているところを WebForms を使っても同じことができることを検証してみます。
サンプルアプリケーションとしては、以前の記事でつくったものにユーザーの表示名( DisplayName )を追加し、ログイン時の表示をユーザー名から表示名に変えてみることにします。

まず、  ApplicationUser クラスに DisplayName プロパティを追加します。

1

この状態で一度ビルドを実行しておいて、ここからは Entity Framework のマイグレーションの手順を実行します。
メニューから「ツール」-「ライブラリ パッケージ マネージャー」-「パッケージ マネージャー コンソール」とたどって、パッケージマネージャーコンソールを表示させます。
そこで

  1. Enamble-Migrations
  2. Add-Migration "DisplayName" <- 文字列は作成されるファイル/クラス名に使われるので他と区別できればなんでもよい
  3. Update-Database

と実行します。

2

えと、上記キャプチャで実行順まちがえてエラーになっているのはスルーの方向で(w

この操作により、 Migrations フォルダが作成され、DBの構成変更に必要なプログラムが自動生成されます。

3

また、実際に作成ずみの DB に DisplayName 項目が追加されます。

4

あとはこれを使っていくだけですね。

Register.aspx (ユーザー登録画面)に表示名の入力欄を追加します。

5

また、Register.aspx.cs ファイルに DisplayName を保存するプログラムを追記します。

6

とりあえず、DisplayName の登録についてはこれだけでOK。

表示のほうですが、 Site.Master.cs ファイルに DisplayName を取得する GetDisplayNmae() メソッドを以下のように追加します。

7

一度 UserManager オブジェクトを生成して、そこから UserID をキーに ApplicationUser オブジェクトをとりだし、 DisplayName を取得する、という手順を踏む必要があります。
また、 using で必要な名前空間を指定しておく必要があります。
この名前空間が正しく指定されていないと、たとえば Context.User.Identity オブジェクトは存在するのに GetUserId() メソッドが存在しない(ようにみえる)なんてことがあるので注意です。

で、このメソッドの追加ができたら、 Site.Master.aspx ファイルのユーザー名の表示箇所をこのメソッドに置き換えましょう。

8

さて、これで実行してみます。

9

こんな感じで登録すると

10

登録に成功するときちんと表示名が表示されるようになります。

以前もユーザーのプロファイルを保持する仕組みというのは存在していたんですが、使いにくいところがありました。
これならデータベースの構造もわかりやすいですね。

UserId をもとにログインしているユーザーのプロパティを取得する方法はこれでいいんですが。。。
管理者がすべてのユーザーの情報を表示したい、なんてときはどうするのがよいのか、今悩んでます。
直接 DB から取り出して利用するしかないのかなぁ。。。
このあたりはまだ宿題、ということで。

ASP.NET Identity を読み解く

前回の記事で ASP.NET Identity でなにができるのか、はざっくり説明しました。
で、これがどのように実現されているのか、を調べてみました。

まずは Web.config になにか情報がないか、もう一度確認してみると。。。

 

1

認証の設定モードを None にしているだけでなく、認証に利用する FormsAuthenticationModule をはずしています。
これ以上の情報は Web.config 内にはないようです。

では、ソースコードになにか情報はないか。

2

Startup.Auth.cs で UseCookieAuthentication メソッドを呼び出しています。
このメソッドは何をやっているんでしょう。。。
ということでいろいろ情報をさがしていくと、 Katana プロジェクトというものにいきつきました。

Katana プロジェクトの概要

このプロジェクトについては上記 MSDN マガジンの記事でみていただくとして。
Katana プロジェクトは Codeplex 上に展開されていますので、ここからソースコードを取り出すことができます。

http://katanaproject.codeplex.com/

テンプレートで利用されているすべてのモジュールのソースコードが存在するわけではありませんが、 UseCookieAuthentication メソッドについては CookieAuthenticationExtensions クラスのメソッドとしてソースを参照することができます。
で、 UseCookieAuthentication メソッドの内容は、ほぼこの2行。

app.Use(typeof(CookieAuthenticationMiddleware), app, options);
app.UseStageMarker(PipelineStage.Authenticate);

1行めは CookieAuthenticationMiddleware を利用するために登録している、といったところでしょうか。
で、2行めは HttpApplication の AuthenticateRequest イベントのタイミングで CookieAuthenticationMiddleware を利用することで登録される CookieAuthenticationHandler を実行する、ということになるのかな?
2行めの UseSategeMarker メソッドについては次の Blog の記事が参考になります。

OWIN Middleware in the IIS integrated pipeline

CookieAuthenticationHandler では認証チケット(cookie)を解析して、問題がなければ AuthenticationTicket を生成し、その内容が最終的には HttpContext 内の User オブジェクトに設定されるようです。

WebForms や ASP.NET MVC の承認の機能はこの User オブジェクトの中身をみて認証済みかどうか、といった判断をしているので、こちらは以前のまま、ということになるようです。

Startup.Auth.cs には UseGoogleAuthentication 他のメソッドがありますが、これらも大きな動きは同じようになっていると思われます。
ただ、 UseGoogleAuthentication の場合、

app.UseStageMarker(PipelineStage.Authenticate);

この UseStageMarker の設定が存在しないので、認証のタイミングはデフォルトの PreRequestHandlerExecute イベントのときになるのかな?

ASP.NET Identity をひととおり使う分にはこんなとこまで知ってる必要は「まったく」ないですが、ついつい調べちゃうのはプログラマの性ですかね(^^;
さて、疑問におもってたところがなんとなくは理解できたので、次は自分の要求にあったカスタマイズをどう実現していくか、という方向に走りますか。。。

カテゴリー:ASP.NET 4.5, ASP.NET Identity, VS2013