「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -戻る --[[Github上の成果物]] --[[アプリケーション設計のポイント]] *目次 [#k79ad689] #contents *概要 [#k9a12c13] **リポジトリ [#c5e3e152] https://github.com/OpenTouryoProject/MultiPurposeAuthSite/ **[[ファーストステップ>汎用認証サイトのファーストステップガイド]] [#ye3a6c02] *機能 [#f4c6e363] -インターネット環境でも安全に利用可能な認証基盤 -認証フレームワークに[[ASP.NET Identity>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Identity]]を採用 **インターネット向けIdP機能 [#v9c059b1] ***サインアップ [#q9032516] ***サインイン・サインアウト [#abb57db0] ***E-mailアドレス確認 [#j00577dc] E-mailアドレスの確認(E-mail confirmation) ***パスワード・リセット [#v4faf7a9] ***アカウント・ロックアウト [#tbc0969e] ***SecurityStamp [#v14a6a69] アカウント編集時、他のSessionを自動的にサインアウトさせるSecurityStamp ***2要素認証 [#u2925d4e] E-mailやSMSを使用した2要素認証(Two-factor authentication) ***外部ログイン [#pd421fad] 外部Idp & STSサービスを使用した、外部ログイン(External login, Social login) ***生体認証の追加 [#x87dd51c] [[FIDO2.0>汎用認証サイトの独自仕様#a4e5d429]]を参照。 **OAuth 2.0 + JWTのSSO可能な拡張STS機能 [#r17c5ca5] [[汎用認証サイト(Multi-purpose Authentication Site)]]に実装された「OAuth 2.0 Server」機能を使用して、~ OpenID ConnectのIDトークン(JWTアサーション)形式のBearer Tokenを発行することで、~ シングル・サインオン(SSO)やアプリケーション連携を実現する。 ***OAuth 2.0 の 4 flowをサポート [#j294c1d5] -Authorization Codeグラント種別 -Implicitグラント種別 -Resource Owner Password Credentialsグラント種別 -Client Credentialsグラント種別 ***Bearer TokenにIDトークン・ライクなJWTアサーションを使用 [#b49443fe] -JWT検証ライブラリの準備。 -ここで発行したJWT形式のBearer Tokenを[[jwt.io>https://jwt.io/]]でも検証可能であり、~ これにより、さまざまなプラットフォーム上のアプリケーションをサポートできる。 **OpenID ConnectのSSO可能な拡張STS機能 [#r17c5ca5] ***OpenID Connect の 3 flowをサポート [#jd0d37fb] OAuth2.0の -Authorization Codeグラント種別 -Implicitグラント種別 を、OpenID Connectの -[[Authorization Code Flow>https://techinfoofmicrosofttech.osscons.jp/index.php?OpenID%20Connect#mcde509a]] -[[Implicit Flow>https://techinfoofmicrosofttech.osscons.jp/index.php?OpenID%20Connect#e7adf5c2]] に拡張した。 また、[[Hybrid Flow>https://techinfoofmicrosofttech.osscons.jp/index.php?OpenID%20Connect#l565139a]] もサポートした。 ***OpenID Connect 拡張方法 [#wa3a07b8] OAuth 2.0 Serverと、HTTPModuleの書き換え機能によりOpenID Connectをサポートしている。 -AccessTokenに使用するJWTアサーションを編集してID Token化している。 -なので、AccessTokenフォーマットはJWTのモードで動かす必要がある。 ***STSスクラッチ実装によるOIDCフルサポート [#q40f0d23] 前述の、[[OpenID Connect 拡張方法>#wa3a07b8]]を廃止し、[[STSスクラッチ実装>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Identity%20%E3%81%AE%20Community%20STS]]で制限事項を解消した。 *[[独自仕様部分の説明>汎用認証サイトの独自仕様]] [#i0d4f1cc] **[[Idp仕様>汎用認証サイトの独自仕様#f550c2de]] [#ed92dc10] -認証用のデータストアと認証機能のセットを提供する。 -インターネット向け認証は、イントラネット向け認証と異なり、~ [[非常に多くの機能が必要になる>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Identity#l1b690dc]](ASP.NET Identityの機能を利用する)。 **[[外部ログイン仕様>汎用認証サイトの独自仕様#w534c815]] [#v17d08eb] -別名、ソーシャル・ログイン。 -「Facebookでログイン」が一般的。 **セキュアトークンサービス(STS)機能 [#fa0a3c47] ***[[OAuth 2.0 Server仕様>汎用認証サイトの独自仕様#td27d2c1]] [#z9445fef] OAuth 2.0は、通常、アプリケーション間連携(認可)に使用するが、~ JWTを使用することでシングル・サインオン(認証)にも使用できる。 ***[[OpenID Connect Server仕様>汎用認証サイトの独自仕様#t9212783]] [#t0f47c7d] ***STS専用モード [#r9857738] [[こちらの設定>汎用認証サイトのファーストステップガイド (5)]]を行うことで、~ 既存のユーザストアに接続してSTS専用モードとして動作させることができる。 *[[動作検証手順の説明>汎用認証サイトの動作検証]] [#sdf20ba9] **[[Idp動作検証>汎用認証サイトの動作検証#z524bb24]] [#x5dd96bb] **[[外部ログイン動作検証>汎用認証サイトの動作検証#x929aa7a]] [#a9787847] **セキュアトークンサービス(STS)機能 [#ydc7f2d0] ***[[OAuth 2.0 Server動作検証>汎用認証サイトの動作検証#o226b9a8]] [#wc364aac] ***[[OpenID Connect Server動作検証>汎用認証サイトの動作検証#o226b9a8]] [#e3041172] ***STS専用モード [#r9857738] [[こちらの設定>汎用認証サイトのファーストステップガイド (5)]]を行うことで、~ 既存のユーザストアに接続したSTS専用モードの動作ができる。 *外部サービス [#ce8626ae] **[[外部ログイン>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Identity%E3%81%AE%E5%A4%96%E9%83%A8%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3#j7ec63cb]] [#ie8c4d4d] Microsoft, Google, Facebook, Twitter, etc. **[[オンライン決済サービス>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E6%B1%BA%E6%B8%88%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9]] [#qf3fddd8] Stripe、PAY.JPなど、オンラインで処理可能な「カード決済」などを行なう。 **[[通知プロバイダ>https://dotnetdevelopmentinfrastructure.osscons.jp/index.php?%E9%80%9A%E7%9F%A5%E3%83%97%E3%83%AD%E3%83%90%E3%82%A4%E3%83%80]] [#j3aea225] 「メール送信」や「SMS送信」がある。 *メモ [#ge1cb21b] **[[SecurityStamp>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Identity#obd1b0ed]] [#sc81e3cf] 詳しくは[[コチラ>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Identity#obd1b0ed]]を参照。 **[[外部ログイン>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Identity%E3%81%AE%E5%A4%96%E9%83%A8%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3]] [#x86be174] -[[クレームベース認証>https://techinfoofmicrosofttech.osscons.jp/index.php?%E3%82%AF%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%99%E3%83%BC%E3%82%B9%E8%AA%8D%E8%A8%BC]] による認証・認可の仕組みを使用する。 -詳しくは以下を参照のこと。 --[[OAuth - マイクロソフト系技術情報 Wiki>https://techinfoofmicrosofttech.osscons.jp/index.php?OAuth]] --[[ASP.NET Identityの外部ログイン - マイクロソフト系技術情報 Wiki>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Identity%E3%81%AE%E5%A4%96%E9%83%A8%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3]]を参照。 **[[セキュアトークンサービス(STS)>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Identity%E3%81%AB%E3%82%88%E3%82%8BSTS%E5%AE%9F%E8%A3%85]] [#cf98a3ef] -[[クレームベース認証>https://techinfoofmicrosofttech.osscons.jp/index.php?%E3%82%AF%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%99%E3%83%BC%E3%82%B9%E8%AA%8D%E8%A8%BC]] による認証・認可の仕組みを提供する。 -詳しくは以下を参照のこと。 --[[OAuth - マイクロソフト系技術情報 Wiki>https://techinfoofmicrosofttech.osscons.jp/index.php?OAuth]] --[[ASP.NET IdentityによるSTS実装 - マイクロソフト系技術情報 Wiki>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Identity%E3%81%AB%E3%82%88%E3%82%8BSTS%E5%AE%9F%E8%A3%85]]を参照。 **負荷分散クラスタ環境化での稼働実績 [#ib3a5a48] 実績、あります。 -基本的に、[[ユーザを1つの物理ノードにルーティングするモード>https://techinfoofmicrosofttech.osscons.jp/index.php?NLB#i56f376b]]で動作させて下さい。 -上記が不可能な場合、以下の設定が必須になります。 --認証チケットをクラスタノード間で共有するために、machine keyを一致させる。 --Sessionをクラスタノード間で共有するために、以下の何れかのモードを使用しSessionのクラスタ対応を行う。 ---StateServer ---SQLServer ---Custom >※ ただし、cookie persistenceの持続する時間によるので、~ ユーザを1つの物理ノードにルーティングできる場合も、基本的に設定した方が良い。 **他サイトとの認証チケットの共有 [#z394b083] ***.NET [#pe0a9346] [[ASP.NET Identity>https://techinfoofmicrosofttech.osscons.jp/index.php?ASP.NET%20Identity]]を使用して共有できる(データストアは共有する)。 ***その他 [#h75cd3ef] 前述の「[[セキュアトークンサービス(STS)>#cf98a3ef]]」を使用する。 -OAuth 2.0, OpenID ConnectのIdP+STSを使用して、SSOする。 -JWTを使用すればクロスプラットフォームな (Bearer) Token として利用可能。 *サポート状況 [#u111c780] https://github.com/OpenTouryoProject/MultiPurposeAuthSite/issues/94#issuecomment-463061867 **[[OAuth 2.0>https://techinfoofmicrosofttech.osscons.jp/index.php?OAuth]] [#s4b720c9] フルサポート **[[OpenID Connect>https://techinfoofmicrosofttech.osscons.jp/index.php?OpenID%20Connect]] [#jdd4f796] 基本的な機能をサポート **[[Financial API (FAPI)>https://techinfoofmicrosofttech.osscons.jp/index.php?Financial%20API%20%28FAPI%29#l4147461]] [#l1a314b6] ***[[FAPI Part 1>https://techinfoofmicrosofttech.osscons.jp/index.php?FAPI%20Part%201%20%28Read%20Only%20API%20Security%20Profile%29]] [#nd0cb6ab] フルサポート ***[[FAPI Part 2>https://techinfoofmicrosofttech.osscons.jp/index.php?FAPI%20Part%202%20%28Read%20and%20Write%20API%20Security%20Profile%29]] [#qbe14ad2] 未サポート **OAuth2拡張 [#z9f113a4] ***[[OAuth PKCE>https://techinfoofmicrosofttech.osscons.jp/index.php?OAuth%20PKCE]] [#a92070dd] ***[[OAuth 2.0 Token Introspection>https://techinfoofmicrosofttech.osscons.jp/index.php?OAuth%202.0%20Token%20Introspection]] [#r02d792d] ***[[OAuth 2.0 Token Revocation>https://techinfoofmicrosofttech.osscons.jp/index.php?OAuth%202.0%20Token%20Revocation]] [#v17657b0] ***[[JWT bearer token authorizationグラント種別>https://techinfoofmicrosofttech.osscons.jp/index.php?JWT%20bearer%20token%20authorization%E3%82%B0%E3%83%A9%E3%83%B3%E3%83%88%E7%A8%AE%E5%88%A5]] [#r038cb10] *参考 [#tbd2d6ef] **[[汎用認証サイトのFAQ]] [#zff81a14] **[[汎用認証サイトの独自仕様]] [#gf66e714] **[[汎用認証サイトの動作検証]] [#ab1b5691] **[[汎用認証サイトのコンフィギュレーション]] [#eb4ea0ac] **[[汎用認証サイトのファーストステップガイド]] [#x08a1fe9]