Open棟梁Project - マイクロソフト系技術情報 Wiki

目次

概要

ASP.NET Identityは、

OAuthクレームベース認証のEndpoint追加をサポートしており、
これにより、Java、JavaScript、Perl、PHP、Python、Rubyなどの
「非 .NET 環境」と認証処理を連携させることもできる。

この処理は、ASP.NET SPAテンプレートの以下のエンドポイントに実装されている。  

ここでは、

  1. ASP.NET SPAテンプレートの動作確認を行い、
  2. ASP.NET MVCテンプレートの差分を確認した上で、
  3. OAuthのEndpoint追加に必要な実装を抽出し、
  4. MVCテンプレートにOAuthのEndpointを追加する手順を書き出し、
  5. その手順の妥当性を以下の検証手順によって検証した。

検証手順

前提

ここでは、以下のような前提のアプリケーションを構築するサンプルを示す。

 +--------+                               +----------------+
 |        |--(A)- Authorization Request ->|                |
 |        |                               |                |
 |        |<-(B)-- Authorization Grant ---|                |
 |        |                               |                |
 |  非    |                               |                |
 |  .     |                               |                |
 |  N     |--(C)-- Authorization Grant -->|  ASP.NET       |
 |  E     |                               |  Identity      |
 |  T     |<-(D)----- Access Token -------|  Token認証機能 |
 |  環    |                               |                |
 |  境    |                               |                |
 |        |                               |                |
 |        |--(E)----- Access Token ------>|                |
 |        |                               |                |   +-----------+
 |        |<-(F)--- Protected Resource ---|                |---| UserStore |
 +--------+                               +----------------+   +-----------+

認証サイト

Web アプリ

開発環境

認証サイト開発

コードの提示はGithub登録まで待ってください。

プロジェクトの準備

  1. Visual Studio 2015 で、新規 ASP.NET Web アプリケーションを作成する。
  2. 「新しい ASP.NET プロジェクト」ダイアログで、以下を選択する。
    • テンプレート: ASP.NET MVC
    • 認証の変更: 個別のユーザー アカウント
  3. Visual Studio の「パッケージ マネージャー コンソール」で、以下のコマンドを実行する。
    Install-Package Microsoft.AspNet.WebApi
    Install-Package Microsoft.AspNet.WebApi.Owin
    Install-Package Microsoft.AspNet.WebApi.Cors

ApplicationOAuthProvider?の追加

Providersフォルダを作成し、OAuthのProviderであるApplicationOAuthProvider?を追加する。

ClientIDによってRedirectする先を変更している。

Startup.Authで、定義したApplicationOAuthProvider?を登録

前述のApplicationOAuthProvider?OAuthのProviderとして登録する。

AccountControlle?に、Authorizeメソッドを追加

これにより、認証後にOAuthのBearer Tokenを発行、
コレを使用してResourcesアクセスを認可できるようになる。

AccountControlle?ReturnBearerTokenScreen?メソッドを追加

Authorizeメソッド実行後にRedirectされる先のAction MethodとViewを準備する。

WebApiConfig?の追加

App_Startフォルダに、ASP.NET Web APIの設定を行うためのWebApiConfig?.csを追加する。

Global.Application_Startメソッドで、定義したWebApiConfig?を登録

Global.asax.csのApplication_Startメソッドで、定義したWebApiConfig?の設定を登録。

OAuthClaimViewModel?の追加

Models フォルダに、Claimを返すためのOAuthClaimViewModel?.csを追加する。

OAuthResourceController?の追加

Controller フォルダに、Claimを返すためのOAuthResourceController?.csを追加する。
ここに、Claim等のOAuthのResourcesを返すためのASP.NET Web APIのメソッドを追加する。

Web アプリ開発

認証連携の動作検証

参考

Tsmatz

かずきのBlog@hatena

Bearer Token (rfc6750)

ASP.NET Identityによる認証サイト
= 上記図中のResource Owner, Authorization Server, Resource Serverに該当する。

  1. (X) 認証サイトのForms認証機構へRequestする。
  2. (Z) 発行されたCookie認証チェットのResponseされる。
  3. (A) Cookie認証チェットを持って、OAuth用のEndpointにRequestする。
    既に認証されているので、内部ではClaimsIdentity?を生成してSign-inされる。
  4. (B)/(C) すると、OAuthProvider?がBearer Token用のEndpointにRedirectされる。
  5. (D) Bearer Token用のEndpointからBearer TokenがResponseされる。
  6. (E) Bearer Tokenを持って、Resources用のEndpointにRequestする。
  7. (F) Resources用のEndpointからClaim等のリソースがResponseされる。

連携先のサイトでは、上記の情報を元に、Cookie認証チェットを発行する。


Tags: :ASP.NET, :ASP.NET MVC, :ASP.NET SPA, ASP.NET Web API, :ASP.NET Identity

Special thanks go to mg-san for his support.


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS