- 追加された行はこの色です。
- 削除された行はこの色です。
「[[Open棟梁 wiki>https://opentouryo.osscons.jp]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。
-[[戻る>汎用認証サイトのファーストステップガイド]]
--[[汎用認証サイトのファーストステップガイド (1)]]
--[[汎用認証サイトのファーストステップガイド (2)]]
--[[汎用認証サイトのファーストステップガイド (3)]]
--[[汎用認証サイトのファーストステップガイド (4)]]
--汎用認証サイトのファーストステップガイド (5)
--[[ファーストステップ (1)>汎用認証サイトのファーストステップガイド (1)]]
--[[ファーストステップ (2)>汎用認証サイトのファーストステップガイド (2)]]
--[[ファーストステップ (3)>汎用認証サイトのファーストステップガイド (3)]]
--[[ファーストステップ (4)>汎用認証サイトのファーストステップガイド (4)]]
--ファーストステップ (5)
--[[ファーストステップ (6)>汎用認証サイトのファーストステップガイド (6)]]
--[[ファーストステップ (7)>汎用認証サイトのファーストステップガイド (7)]]
*目次 [#i6d74b0f]
#contents
*概要 [#i66a9a73]
[[汎用認証サイト(Multi-purpose Authentication Site)]]~
の導入前の評価を行うためのファーストステップガイド。
(5) では、「本番稼働前の最終チェック」を行う。
(5) では、汎用認証サイトを既存のユーザストアに接続し、~
IdP機能を提供せず、STS機能のみを提供する手順を説明する。
*[[web.config>https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Web.config]] [#g23e0f40]
*コンフィギュレーション [#r3cd2510]
[[必要な機能をロックダウンさせて>汎用認証サイトのコンフィギュレーション#ja5926d6]]、STS専用モードで動作させる。
**connectionStrings [#u7f06a71]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Web.config
*動作確認 (1) [#z3b2d831]
ログインと、OAuth2、OIDCのID federation以外の~
機能(サインアップ、編集、管理)が動作しなくなっていることを確認する。
接続文字列を確認する。
*コード修正 [#teb7e88d]
-続いて、以下のコードを修正して、既存のユーザストアに接続する。
**globalization [#b8d18ddb]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Web.config#L23
-以下のユーザストアについては引き続き必要になるので注意する。
--AuthenticationCodeDictionary
--RefreshTokenDictionary
--, etc.
カルチャ設定を確認する。
**UserStoreクラス [#keaf791c]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Models/ASPNETIdentity/Entity/UserStore.cs
**compilation debug [#j007dfef]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Web.config#L25
以下のメソッドを修正し、~
既存のユーザストアからApplicationUser オブジェクトを作成するように変更する。
デバッグ・モードを確認する。
***FindByIdAsyncメソッド [#k31dde37]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/CommonLibrary/Data/CmnUserStore.cs#L207
**sessionState [#y12d93d5]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Web.config#L55
-userIdを使用して、ユーザストア内を検索し情報をロードする。
タイムアウト値や、クラスタリング対応など、Session設定を行う。
-ApplicationUserオブジェクトを生成し(以下は生成例)、
user = await ApplicationUser.CreateBySignup(userName, true);
**customErrors [#d1295525]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/Web.config#L101
-以下のプロパティを設定する。
--user.Id
--user.PasswordHash
エラーが画面の表示方法の変更。offはデバッグ時設定。
***FindByNameAsyncメソッド [#ib0fb94c]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/CommonLibrary/Data/CmnUserStore.cs#L313
*[[app.config>https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config]] [#p2c64ac7]
-userNameを使用して、ユーザストア内を検索し情報をロードする。
**FxLog4NetConfFile [#m28e71b5]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L25
-ApplicationUserオブジェクトを生成し(以下は生成例)、
user = await ApplicationUser.CreateBySignup(userName, true);
ログ出力設定を確認する。
-以下のプロパティを設定する。
--user.Id
--user.PasswordHash
**FxSessionTimeOutCheck [#o2910506]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L38
**CustomPasswordHasherクラス [#n68dbe17]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/CommonLibrary/Password/CustomPasswordHasher.cs
-Sessionのタイムアウト検出機能のON/OFFを確認する。
-企業向けビジネス・アプリケーションではON推奨だが、汎用認証サイトはOFFでも良い。
***HashPasswordメソッド [#s46d74e9]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/CommonLibrary/Password/CustomPasswordHasher.cs#L63
**IsDebug [#d4b96d35]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L85
-必要に応じて、既存のユーザストアに保存されている~
パスワード・ハッシュとハッシュ・アルゴリズムを一致させる。
デバッグモードをOFF(false)に変更する。
-基本的に、VNHashAlgorithmメソッドを新設して、~
HashPasswordメソッドから利用するようにする。
このフラグが影響を与える機能の一覧
*動作確認 (2) [#oae535cb]
上記の修正が完了した後に、既存のユーザストアを使用したログインの動作確認を行う。
-テスト・ユーザを登録する(true)/しない(false)。
-デバッグ・ログ出力(Debug.WriteLineへの併出(true)、log4net(false))
-通知の際、Debug.WriteLineへ出力(true)/Notification Providerへ出力(false)
-オンライン決済のテスト機能を表示する(false)/しない(true)。
*補足 [#t9ac4f0d]
**UserStoreType [#l061f297]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L88
**ApplicationUserクラス [#pe130485]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/CommonLibrary/Entity/ApplicationUser.cs
-使用するユーザストアのストレージタイプを選択する。
-memの場合は、IsDebugがtrueの扱いになるので注意する。
CreateByRegisterとCreateBySignupの違い。
**Multi-tenant [#n2784f4d]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L91
***CreateByRegister [#l0441455]
-事前登録用
-ParentIdが必要
**AdministratorUID/PWD [#a85066bd]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L97
***CreateBySignup [#v76b64d0]
-サインアップ用
-ParentIdが不要
-emailConfirmedが必要
-システム管理者のアカウントを入力する。
-パスワード(AdministratorPWD)は稼働後(DB登録後)、削除して問題ない。
**LDAPのハッシュ・パスワードを取得する方法 [#f3dda38d]
LDAPのハッシュ・パスワードを取得することはできるか?
**サインアップ、サインイン・サインアウト [#qcc36a50]
***ユーザ名 [#w99b67e9]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L118
***OpenLDAPから [#x7d23e8b]
userPassword属性に保存されているので、ldapsearchコマンドを使用してこれを取得する。
-AllowOnlyAlphanumericUserNames~
UserNameがalphabetと数字のみかどうか。
-RequireUniqueEmail~
UserNameがEmailかどうか。
***ActiveDirectoryから [#i2b83ff9]
ActiveDirectoryでは、通常、ハッシュ・パスワードを取得できないので、~
sha1hexfltrと言うツールを使用して取り出すことができる模様。
***パスワード [#k688188c]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L131
-ActiveDirectoryからパスワードをどうしてもとりたい場合には - taguiの日々の妄想~
http://d.hatena.ne.jp/tagui99/20100927
-RequiredLength~
必要な文字列長(最小の文字列長)
-RequireNonLetterOrDigit~
英数以外の文字を必要とするかしないか。
-RequireDigit~
数字を必要とするかしないか。
-RequireLowercase~
小文字を必要とするかしないか。
-RequireUppercase~
大文字を必要とするかしないか。
***その他の方法 [#v2d13f1e]
パスワードに"LDAP:UserID"などと保存しておき、~
PasswordHasher ([[CustomPasswordHasher>https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/CommonLibrary/Password/CustomPasswordHasher.cs]])内部で、LDAP認証するのも手。
***サインアップ [#t509df21]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L123
-LDAP認証
--VBScript/ADSIでOpenLDAPの認証を受ける - ひらいて~
http://d.hatena.ne.jp/s0u/20060610/1149950451
-DisplayAgreementScreen~
約款画面を表示するかどうか。
-EmailConfirmationTokenLifespanFromHours~
メアド検証リンクの有効期限(時間)
--[ADSIプログラミング] VBScript でユーザ認証してみよう (OpenDsobject)
---1
https://blogs.technet.microsoft.com/jpilmblg/2009/05/20/adsi-vbscript-opendsobject-1/
---2
https://blogs.technet.microsoft.com/jpilmblg/2009/05/28/adsi-vbscript-opendsobject-2/
***ロックアウト [#h22cd4d3]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L138
**Proxy [#u184d268]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L50
主に、開発時の利用を想定している。
***InternetProxy(インターネット・プロシキ) [#c9349f28]
***IntranetProxy(イントラネット・プロシキ) [#t472b89d]
***DebugProxy(デバッグ・プロキシ) [#jf26d061]
**ロックダウン [#ba88a223]
***編集画面 [#e0c9ab81]
-UserName~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L126
--AllowEditingUserName~
UserNameの編集を許可するかどうか
--RequirePasswordInEditingUserNameAndEmail~
UserNameとEmail編集時にパスワードを要求するかどうか
-その他~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L157
--CanEditEmail~
E-mailアドレス編集の有効(true)/無効(false)
--CanEditPhone~
電話番号編集の有効(true)/無効(false)
--CanEdit2FA~
2要素認証設定の有効(true)/無効(false)
--CanEditUnstructuredData~
非定型データ編集の有効(true)/無効(false)
--CanEditOAuth2Data~
OAuth2データ編集の有効(true)/無効(false)
**各種外部サービスの設定 [#v7103540]
***外部ログイン [#lb55c171]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L166
ON/OFFとキー設定。
***Notification Provider [#ic78474e]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L100
-SMTPの設定
-SMS (Twilio)の設定
***文面ファイル [#udd7f285]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L113
文面ファイルの内容を確認する。
***オンライン決済サービス [#uc548d7f]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L70
本番用のkeyを設定する。
**OAuth2 [#c30460a9]
***EquipOAuthServer [#h5b16db8]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L189
汎用認証サイト(IdP)にOAuth2のSTS機能を付加する(true)/しない(false)。
***プロパティ [#v4cccadb]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L191
-AllowOAuthInsecureHttpEndpoints~
--HTTPを許可する(true)/しない(false)。
--なお、OAuth2は、HTTPSが推奨。
-OAuthAuthorizeEndpointCanDisplayErrors~
Authorize エンドポイントでエラーを表示する(true)/しない(false)。
-OAuthAccessTokenExpireTimeSpanFromMinutes~
Access Tokenの有効期間(分)
-OAuthRefreshTokenExpireTimeSpanFromDays~
Refresh Tokenの有効期間(日)
***ServerUri [#md4c4b36]
各種サーバのEndpointへのUriを設定する。
-Authorization Server~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L211
-Resource Server~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L223
-Client~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#229
***JWT設定 [#wdcfd792]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L197
-EnableCustomTokenFormat
--AccessTokenのフォーマットをJWT形式にするか(true)/ASP.NET Identity形式にするか(false)。
--JWT形式を選択する意味。
---ResourcesServerはASP.NET Identityに依存しなくて良くなる。
---AccessToken(JWT)をJWT検証できるため、~
ClientはOAuth2の脆弱性を検知可能で、認証用途でより安全に使用可能。
-OAuthIssuerId~
iss claimに格納される、適切なIssuerId(Uri形式)を設定する。
-X.509 証明書~
必要に応じて、本番環境にふさわしいX.509証明書に変更する。
***ロックダウン [#y16812f7]
-Grant Type~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L205
--Resource Owner Credentials Grant Typeの有効(true)/無効(false)
--Client Credentials Grant Typeの有効(true)/無効(false)
-OAuth2テスト用のRedirectエンドポイント~
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L233
***client_id、client_secret [#xd54c828]
https://github.com/OpenTouryoProject/MultiPurposeAuthSite/blob/develop/root/programs/MultiPurposeAuthSite/MultiPurposeAuthSite/app.config#L242
client登録のclient_id、client_secretを、必ず、外部に漏洩していない値に更新する。