Repository navigation
OTR_Authentication
nishi_74322014 edited this page Oct 27, 2026
·
1 revision
Open 棟梁の認証の主眼は、認証済みユーザの情報をどう保持するかである。
- 認証そのものの仕組みは提供しない。Web では .NET の認証(Forms 認証、Cookie 認証)と組み合わせて使う。
- ログイン時は、.NET 側のサインインと、Open 棟梁のユーザ情報の設定の両方を行う。 片方だけでは動かない。
| 階層 | クラス | 担当 | 中身 |
|---|---|---|---|
| ユーザ情報親クラス1 | UserInfo |
フレームワーク | 空のクラス(マーカー) |
| ユーザ情報親クラス2 | MyUserInfo |
纏め者 | 既定のテンプレートは UserName / IPAddress のみ。所属・権限などはプロジェクトが追加する |
-
MyUserInfoに項目を足せるのは纏め者だけ。足りない情報は、まず引数クラスで渡せないかを検討する。
【ログイン時】アプリのログイン処理
① .NET 側のサインイン(Cookie 認証など)
② UserInfoHandle.SetUserInformation(new MyUserInfo(userName, ipAddress)) → Session へ
【リクエストごと】P 層の親クラス2
this.UserInfo に Session から取り出して設定(無ければ認証チケットから復元)
【B 層の呼び出し時】開発者
new TestParameterValue(..., this.UserInfo) → 引数クラスで B 層へ
| 何をするか | 仕組み | |
|---|---|---|
| ① .NET 側 | 認証状態を維持する | net48:Forms 認証/net10.0:Cookie 認証(ClaimsPrincipal + SignInAsync) |
| ② Open 棟梁側 | フレームワークが使うユーザ情報を保持する |
MyUserInfo + UserInfoHandle(Session) |
-
this.UserInfoは null にならない。Session に無ければ認証チケットから復元され、未認証ならUserNameが"未認証"になる。 - ただし、復元では
UserNameとIPAddressしか埋まらない。プロジェクト固有の項目を持たせるには、ログイン時に完全なMyUserInfoを Session に入れる。
| メソッド | 用途 |
|---|---|
SetUserInformation(userInfo) |
Session へ格納(ログイン時) |
GetUserInformation<T>() |
Session から取得(net10.0) |
GetUserInformation() |
Session から取得(net48) |
DeleteUserInformation() |
Session から削除(ログアウト時) |
- 同名でもランタイムでシグネチャが違う(net10.0 では Session に JSON で格納する)。両対応のコードでは注意する。
- Session から直接ユーザ情報を読む(
UserInfoHandleを経由する)。 - B 層で
UserInfoHandleからユーザ情報を取る(引数クラス経由で受け取る。B 層が Session に依存してはならない)。 - P 層で毎回
GetUserInformation()を呼ぶ(親クラス2 が取得済み。this.UserInfoを使う)。
- Windows Forms は
UserInfoHandleも Session も使わず、MyBaseControllerWin.UserInfo(static)で保持する。 - 外部の IdP でログインさせる場合はOAuth2 / OIDC クライアント。成功後の処理は上記と同じ。
- スキル
opentouryo-authを使わせる。 - 認証まわりはセキュリティ上の影響が大きいので、①と②の両方が実装されているか、ログアウトで両方を消しているかを人がレビューする。
Tags: 再構築
このWikiは「Open棟梁Project」,「OSSコンソーシアム 開発基盤部会」によって運営されています。