- 追加された行はこの色です。
- 削除された行はこの色です。
[[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/Account/Authorize
--http://localhost:XXXX/任意のClaim等のResource用のEndpoint
ここでは、
+[[ASP.NET SPA]]テンプレートの動作確認を行い、
+[[ASP.NET MVC]]テンプレートの差分を確認した上で、
+[[OAuth]]のEndpoint追加に必要な実装を抽出し、
+MVCテンプレートに[[OAuth]]のEndpointを追加する手順を書き出し、
+その手順の妥当性を以下の検証手順によって検証した。
*検証手順 [#p5f5a8e3]
**前提 [#cac6a33f]
ここでは、以下のような前提のアプリケーションを構築するサンプルを示す。
+--------+ +----------------+
| |--(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 |
+--------+ +----------------+ +-----------+
***認証サイト [#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で、定義したApplicationOAuthProviderを登録 [#n71f912c]
前述のApplicationOAuthProviderを[[OAuth]]のProviderとして登録する。
***AccountControlleに、Authorizeメソッドを追加 [#q0c1012d]
これにより、認証後に[[OAuth]]のBearer Tokenを発行、~
コレを使用してResourcesアクセスを認可できるようになる。
***AccountControlleにReturnBearerTokenScreenメソッドを追加 [#k381df07]
Authorizeメソッド実行後にRedirectされる先のAction MethodとViewを準備する。
-Action Method~
Authorize 属性をつけることで、Authorize メソッドからRedirectされたときに、Access Token 情報が URL に付与される。
-View~
URL に付与された、Access Token を取得し、Bearer Tokenを返す。
--Web
---通常、露見しないようにHiddnか何かに埋め込む。
---CORS (Cross-Origin Resource Sharing)の場合、~
遷移元のWeb サイトに遷移させるためのJavaScript処理を追加する必要がある。
--API :
---通常、JSONで返す。
---CORSの場合も、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に該当する。
+ (X) 認証サイトのForms認証機構へRequestする。
+ (Z) 発行されたCookie認証チェットのResponseされる。
+ (A) Cookie認証チェットを持って、[[OAuth]]用のEndpointにRequestする。~
既に認証されているので、内部ではClaimsIdentityを生成してSign-inされる。
+ (B)/(C) すると、OAuthProviderがBearer Token用のEndpointにRedirectされる。
+ (D) Bearer Token用のEndpointからBearer TokenがResponseされる。
+ (E) Bearer Tokenを持って、Resources用のEndpointにRequestする。
+ (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.