[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]

-[[戻る>ASP.NET Identity]]

* 目次 [#y767ea78]
#contents

*概要 [#x51e7243]
[[ASP.NET Identity]]は、

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

この処理は、[[ASP.NET SPA]]テンプレートの以下のエンドポイントに実装されている。
 
-ASP.NET SPA (JavaScript) の Web API 認証 (ASP.NET Identity) ? Tsmatz~
https://blogs.msdn.microsoft.com/tsmatsuz/2014/05/20/asp-net-spa-javascript-web-api-asp-net-identity-html5biz/
--http://localhost:XXXX/Token
--http://localhost:XXXX/Account/Authorize

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

*検証手順 [#p5f5a8e3]
**前提 [#cac6a33f]
ここでは、以下のような前提のアプリケーションを構築するサンプルを示す。

#ref(goal.png,left,nowrap,50%,アプリケーション構成)

***認証サイト [#l4133d0e]
-[[ASP.NET MVC]]アプリケーションとして作成する。
-[[ASP.NET Identity]]を用いて、各 Web アプリのアカウント管理を行う。
-ユーザー情報へのアクセスには、既定の[[Entity Framework]]を使用する。
-ユーザー情報は、既定の LocalDb に格納する。

***Web アプリ [#o744ec42]
-個々の Web アプリではアカウント管理は行わず、~
アカウント管理が必要な場合は認証サイトにリクエストする。
-Java Web アプリケーションとして作成する。

***開発環境 [#heed732c]
-認証サイト側
--Visual Studio 2015
--プログラム言語は C#

-Web アプリ側
--Eclipse 4.6 Neon
--プログラム言語は Java, JavaScript

**認証サイト開発 [#k9408908]
コードの提示はGithub登録まで待ってください。

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

***ApplicationOAuthProviderの追加 [#z15e0624]
Providersフォルダを作成し、[[OAuth]]のProviderであるApplicationOAuthProviderを追加する。

ClientIDによってRedirectする先を変更している。
-Web : HTML
-API : JSON

***Startup.Authで、UseOAuthBearerTokensを実行 [#n71f912c]
前述のApplicationOAuthProviderを[[OAuth]]のProviderとして登録する。

***AccountControlleに、Authorizeメソッドを追加 [#q0c1012d]
これにより、[[OAuth]]のBearer Tokenを使用して、Resourcesアクセスを認可できるようになる。

***AccountControlleにBearer Tokenを返すためのAction MethodとViewを追加 [#k381df07]
Authorizeメソッド実行後にRedirectされる先のAction MethodとViewを準備する。

-Action Method~
Authorize 属性をつけることで、Authorize メソッドからRedirectされたときに、Access Token 情報が URL に付与される。

-View~
URL に付与された、Access Token を取得し、Bearer Tokenを返す。
--Web : CORS (Cross-Origin Resource Sharing)の場合、~
遷移元のWeb サイトに遷移させるためのJavaScript処理を追加する。
--API : JSONで返す。

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

***Global.Application_Startメソッドで、定義したWebApiConfigを登録 [#k795c063]
Global.asax.csのApplication_Startメソッドで、定義したWebApiConfigの設定を登録。

***OAuthClaimViewModelの追加 [#me6fe947]
Models フォルダに、Claimを返すためのOAuthClaimViewModel.csを追加する。

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

**Web アプリ開発 [#zda88633]

**認証連携の動作検証 [#n7eec8a2]

*参考 [#f733c473]
**Tsmatz [#o09dc264]
-ASP.NET SPA (JavaScript) の Web API 認証 (ASP.NET Identity) – Tsmatz~
https://blogs.msdn.microsoft.com/tsmatsuz/2014/05/20/asp-net-spa-javascript-web-api-asp-net-identity-html5biz/

**かずきのBlog@hatena [#ode84d2f]
-ASP.NET WebAPI2でAjaxでOAuth認証するよ(ついでにTypeScriptとReact)~
http://blog.okazuki.jp/entry/2016/01/15/215901
-HttpClientクラスがリダイレクトをよきに計らってくれるのをどうにかしたい~
http://blog.okazuki.jp/entry/20121225/HttpClientTips

**Bearer Token (rfc6750) [#d65223fc]
-OAuth 2.0のbearer tokenの最新仕様を調べたらあまり変わってなかった - r-weblife~
http://d.hatena.ne.jp/ritou/20110402/1301679908
--The OAuth 2.0 Authorization Framework: Bearer Token Usage(日本語)~
http://openid-foundation-japan.github.io/rfc6750.ja.html
  +--------+                               +---------------+
  |        |--(A)- Authorization Request ->|   Resource    |
  |        |                               |     Owner     |
  |        |<-(B)-- Authorization Grant ---|               |
  |        |                               +---------------+
  |        |
  |        |                               +---------------+
  |        |--(C)-- Authorization Grant -->| Authorization |
  | Client |                               |     Server    |
  |        |<-(D)----- Access Token -------|               |
  |        |                               +---------------+
  |        |
  |        |                               +---------------+
  |        |--(E)----- Access Token ------>|    Resource   |
  |        |                               |     Server    |
  |        |<-(F)--- Protected Resource ---|               |
  +--------+                               +---------------+

ASP.NET Identityによる認証サイト~
= Resource Owner, Authorization Server, Resource Server

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

----
Tags: [[:ASP.NET]], [[:ASP.NET MVC]], [[:ASP.NET SPA]], [[[[ASP.NET Web API]]]], [[:ASP.NET Identity]]

Special thanks go to maegawa-san for his support.


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