ホーム > ASP.NET 4.5, ASP.NET Identity, VS2013 > ASP.NET Identity を読み解く

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
  1. まだコメントはありません。
  1. No trackbacks yet.

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。