Skip to content

OTR_MPASReleaseDetails

nishi_74322014 edited this page Nov 1, 2026 · 4 revisions

詳細なリリース情報(汎用認証サイト)

概要

MultiPurposeAuthSite(汎用認証サイト、MPAS)リポジトリの Git のタグ間の差分を読んで作った、詳細なリリース情報。
利用者向けの要約は 汎用認証サイトのリリース情報 を参照。

  • 対象:C:\MultiPurposeAuthSite のクローン。未リリース区間は origin/develop(最終コミット 2026-10-23、PR #313 のマージ)を基準にする。
    develop に未マージの作業中ブランチ(5th_agent、2026-10-28)は、別の節に分けて書く(その後マージ済み。節の注を参照)。
  • パスは root/programs/ からの相対で書く。
  • #番号は MultiPurposeAuthSite リポジトリの Issue(Open 棟梁の Issue は「OTR #」と書く)。
  • 未リリース区間の A-1・C-7 などの記号は、リポジトリの ANALYSIS-IdP.md(IdP / STS の適合性分析)の項目番号である。
区間 期間 コミット(マージ除く) 差分
01-00 → 01-10 2017-09-27 〜 2018-03-23 33 90 ファイル、+6,921 / −2,498
01-10 → 01-20 2018-03-23 〜 2018-09-28 20 122 ファイル、+3,613 / −3,856
01-20 → 01-80 2018-09-28 〜 2019-03-28 127 473 ファイル、+70,725 / −34,468
01-80 → 01-90 2019-03-28 〜 2019-09-27 60 153 ファイル、+8,903 / −4,541
01-90 → 01-95 2019-09-27 〜 2020-06-16 4 67 ファイル、+4,018 / −895
01-95 → 01-99 2020-06-16 〜 2021-03-29 26 64 ファイル、+3,415 / −853
01-99 → 02-00 2021-03-29 〜 2022-04-05 21 124 ファイル、+3,303 / −411
02-00 → develop 2022-04-05 〜 2026-10-23 312(PR 18) 706 ファイル、+268,899 / −36,503
(参考)develop → 作業中ブランチ 2026-10-23 〜 2026-10-28 56 02-00 からの累計で 744 ファイル、+278,774 / −44,264

詳細

01-00 → 01-10

  • JWT Bearer Token Flow:アサーションを作るツール(CreateJwtBearerTokenFlowAssertion)と、ClientCredentialsFilter。
  • Token Revocation(OAuth2RevocationProvider)。
  • OIDC:OidcTokenEditor(Hybrid Flow の hash クレーム、HashClaimType)、OpenIDConnectModule の作り直し。
  • FIDO2(FIDO2Helper。ドラフト)。
  • Cordova からの PKCE、汎用モバイル・バックエンドを見据えた変更。
  • #5・#6・#9・#50・#52〜#54・#62〜#67・#75 ほか。

01-10 → 01-20

  • jwks_uri による JWK Set の発行(CreateJwkSetJson ツール)。鍵 ID(kid)の変更への追随。
  • 非同期処理サービスの部品を、同梱の Open 棟梁(Frameworks/Infrastructure)から削除(AsynchronousProcessingService リポジトリへ)。
  • 同梱の Open 棟梁に、ASP.NET Core 用のベースクラス(MyBase*Core)を追加。
  • #69〜#73・#79〜#83・#86・#90・#91、リリース作業(#85)。

01-20 → 01-80

ASP.NET Core 版の追加と、両系統の共通化の区間(#74・#89・#92・#95 ほか)。

区分 内容
追加 MultiPurposeAuthSiteCore/(ASP.NET Core MVC 版:AccountController・ManageController・OAuth2EndpointController・OAuth2ResourceServerController・Startup ほか)
追加 CommonLibrary/(両系統が使う実装の実体):Data/(ユーザ・ロールのストア)、Extensions/(DataProvider・WebAuthnHelper)、Notifications/(Email・SMS)、TokenProviders/(AuthorizationCodeProvider・CmnAccessToken・CmnEndpoints・CmnIdToken)、ViewModels/
追加 net48 版:Fido2ServerController・OAuth2EndpointController・OAuth2ResourceServerController
削除 同梱の Open 棟梁(Frameworks/Infrastructure。35 ファイル)を削除し、Open 棟梁のビルド成果物を参照する形に
削除 net48 版の旧 STS の実装(AccessTokenFormatJwt・ApplicationOAuthBearerTokenProvider・OpenIDConnectCodeFilter ほか)→ 既製フレームワークの実装から、スクラッチの実装へ
  • Entity Framework の利用を取りやめ。Oracle(Oracle.ManagedDataAccess.Core)のサポート。
  • 外部ログインの確認(#102)、Open 棟梁側の変更(OTR #319・#322・#325・#326)への追随。

01-80 → 01-90

  • SAML2.0:SamlProviders/CmnEndpoints、HomeSaml2OAuth2StartersViewModel(#77・#104・#111)。
  • FAPI Part 2:RequestObjectProvider(JAR)、CmnResponseObject(JARM)、IssuedTokenProvider(#68 が 28 コミット)。
  • WebAuthn のスクリプト(Scripts/esm・umd)、CommandLineTools の拡充。
  • #107・#108・#116・#117・#122〜#124、プレリリース版の後始末(-preview の削除)。

01-90 → 01-95

  • CIBA(Extensions/CibaProvider)、FCM のプッシュ通知(Notifications/FcmService)、PPID(Util/PPIDExtension)。
  • SQL Server での動作確認(net48・netcoreapp)。

01-95 → 01-99

  • Device Authorization Grant(Extensions/DeviceAuthZProvider。#125 を CommonLibrary・net48 版・Core 版に)。
  • 利用者ストアのコンテナ化、nuget.exe の更新。
  • #128・#132・#133・#135・#138・#141・#142・#144、Open 棟梁側の変更(OTR #362・#365・#367・#382)への追随。

01-99 → 02-00

  • CIBA の Authentication Device(authentication_device/。Flutter の Android・iOS アプリ)。
  • 開発環境でのテスト用コード。
  • #139・#152〜#154・#156、OpenTouryoTemplates #108、Open 棟梁側の変更(OTR #398・#410)への追随。

02-00 → develop(未リリース)

未リリース。 次版(02-10)に入る予定の変更で、確定ではない。
3 年余りの停止の後、再起動(Reboot)→ エージェントによる分析 → 段階的な修正の順で進めた。

段 期間 主な Issue 内容
Reboot 1〜3 2025-12-19 〜 2026-03-30 #179・#180 Open 棟梁 03-20 の参照(3_BuildLibsAtOtherRepos.bat の branchName)、net6.0 → net10.0、パッケージの更新
1st_agent 2026-09-07 〜 09-17 #182〜#216 文書(AGENTS.md・ANALYSIS*.md)、適合性の分析(ANALYSIS-IdP.md)、応答形式・異常系の修正、E2E テスト
2nd_agent 09-17 〜 10-02 #129・#140・#151・#188・#205・#218〜#258 セキュリティ(有効期限・PKCE・クライアント認証)、PAR、ログアウト、ID 連携、署名アルゴリズム
3rd_agent 10-02 〜 10-08 #137・#260〜#284 redirect_uri・CORS・response_type・同意の永続化、WebAuthn の作り直し
4th_agent 10-08 〜 10-23 #277・#286〜#311 ID 連携の n 件化、DCR、DPoP、ログアウトの拡充、レート制限

A. 応答形式の不適合(RP・適合性テストが通らない)

項目 Issue 内容
A-1 #182 expires_in が常に 0(.Seconds → .TotalSeconds)
A-3・A-4 #184・#201 JWT の exp / nbf / iat、email_verified / phone_number_verified が文字列だった(JARM を含む)
A-5 #186・#197 OIDC のとき redirect_uri が code に紐付かない(条件が反転していた)
A-6・A-8 #187 認可エンドポイントのエラー応答が独自形式で、コードが全て server_error だった
A-7 #196 エラーの HTTP ステータスが 200 だった
A-8-2 #218 トークン応答にキャッシュ制御のヘッダが無かった
A-9・A-10 #189・#228 discovery のキー名の末尾スペース、その他の不整合と未広告
A-11 #200 /revoke /introspect がヒントを必須にし、無効なトークンをエラーにしていた(RFC 7009 / 7662)
A-12 #247・#254 max_age を超えたとき・未サインインで prompt=none のときの応答(login_required)
A-13 #245 refresh_token で更新すると、登録種別のクレーム(fapi)が消えた
A-14 #140 pairwise のクライアントに sub 以外を返せていなかった
(A-2) #183 誤検出(nonce が無いと id_token が発行されない、という指摘は誤り。見誤った理由を記録として残している)

B. 異常系で HTTP 500 になる

  • kid の無い JWT、/token の異常系、使用済み・不正な code / device_code、他クライアントの refresh_token、存在しない request_uri、JWT でない値(#185・#199・#241)。

C. セキュリティ上の弱点

項目 Issue 内容
C-1 #193 /device_authz にクライアント認証が無かった
C-2 #194 /revoke /introspect がトークンの所有者を確認しなかった
C-3 #272 prompt=none が同意画面を無条件にスキップしていた
C-4・C-5・C-11 #188・#229 認可コード・refresh_token・Request Object に有効期限が無かった(ワンタイム化・再利用検知も追加)
C-6 #187 state を URL エンコードせずに連結していた
C-7 #220・#221・#224 PKCE の扱いが OAuth 2.1 と噛み合わない(plain、code_challenge の必須化、クライアント単位の必須化)
C-8 #129 トークンの alg ヘッダで検証器を選んでいた
C-9 #265 CORS が全エンドポイントで AllowAnyOrigin だった
C-10 #263 redirect_uri の比較が大文字小文字を無視していた。テスト用の抜け道の削除
C-12・C-13 #223・#251 Cookie 認証の有効期限が 2 分にハードコード、DataProtection の鍵が永続化されていなかった
C-14・C-16 #190・#191 nonce が implicit / hybrid で必須でなかった、送られていない nonce を state から捏造していた
C-15 #267 response_type の照合が文字列の完全一致だった(順不同の集合に)
C-17 #198 要求したスコープがそのまま発行されていた
C-18 #224 Device AuthZ グラントが登録種別を判定していなかった
C-19 — mTLS のトークンの紐付け(cnf)が形式違いで、照合もしていなかった(RFC 8705 形式にし、/userinfo で照合)
C-20・C-21 #238・#237 private_key_jwt が仕様と違う名前でしか通らなかった、Basic の資格情報を復号せずに照合していた
C-22 #245 code_challenge を送った認可コードが、code_verifier 無しで交換できた
C-25 #305 mTLS で、登録が空のときに空の Subject DN が一致していた

D. 機能の追加

項目 Issue 内容
D-1・D-1-2 #232・#310 RP-Initiated Logout(/end_session)、sid(RP ごとに別の値)、Back-Channel Logout(logout_token)、Front-Channel Logout(iframe)。Session Management は見送り
D-2 #229 PAR(/par)。/ros は RFC 9101 §5.2.1 の任意機能として残す
D-3 #311 DPoP(/token で証明を受け、cnf.jkt で発行。7 つのグラント全部)
D-4 #307・#308・#309 Dynamic Client Registration(登録・管理・クライアント認証の方法、software_statement の発行者の台帳、jwks_uri)
D-5 #231・#252 認可応答の iss(RFC 9207)
D-6 #272 同意の永続化(ConsentGrant 表。DDL 3 方言)
D-7 #230 profile / address スコープのクレーム(設定 UserClaimsMapping で対応付け)
D-8 #306 クライアントあたり複数の redirect_uri(空白区切り)
D-9・D-9-2 #129・#151 署名鍵のローテーション(SigningKeys の表)、PPID の秘密のローテーション(sub の対応表)
D-10 #302 access_token の typ: at+jwt(OTR #611 の追随)、jku を出さない
D-12 #220 OAuth 2.1 への整合(雛形の Implicit / ROPC を無効に)
D-13 #305 レート制限 / ブルートフォース対策(slow_down など)
D-15 #292 ID 連携の上流を n 件に(設定 IdFederationUpstreams + 利用者ストア、管理画面 /IdFederationAdmin)
— #129 署名アルゴリズム:RS384 / RS512、ES384 / ES512、PS256 / PS384 / PS512 を登録で選べる。検証する側の alg もクライアント単位(#262)
— #140・#286・#289・#291 ID 連携:認可コード + PKCE(S256) + client_secret_post、(iss, sub) で連携、iss・aud の照合、SAML2 での委譲、上流の discovery・メタデータから鍵を引く
— #213・#216 2FA のプッシュ承認(MobileApp。net10.0 / net48)
— #137 WebAuthn の作り直し(net10.0 は FIDOServerMode。net48 は削除。Users.FIDO2PublicKey → FIDO2Data 表)

E. 品質

項目 Issue 内容
E-2 #256 セッションの置き場を選べるように(SessionStoreType:mem / sql / redis)
E-3 #265 CORS の 3 重定義の整理
E-4 #304 ファイルの文字コード(UTF-8 + BOM)
E-5 — log4net 3.2.0 → 3.3.0
E-7 #303 JWK Set の配信(ファイルの変更を検知、ETag・304)
E-9〜E-12 #140 ID 連携の /token の宛先の書き換え、code_verifier の空文字、iss を見ていない、独自スコープの要求
— #277 ブラウザでしか測れないもの(描画・JavaScript)のテスト(Tests/WebUI)など、段階 1〜7
— — 管理画面のトークン取得処理、オンライン決済サービス(支払い情報)の削除
  • 残り:D-14(適合性テスト:OpenID Foundation Conformance Suite を回す手順)、E-1(Minimal Hosting への移行)、E-8(AccountController からの STS 部分の切り出し)。

構造の変化

区分 内容
追加 Tests/E2ETests(126 ファイル)・Tests/MtlsTestHook、test.ps1・TESTCASES.md
追加 CommonLibrary/Co/(設定と定数。3 ファイル)
追加 CommonLibrary/Extensions/(PAR・DPoP・DCR・ログアウト・ID 連携などの Provider。28 ファイル)
追加 CommonLibrary/TokenProviders/:ClientModePolicy・CmnDPoP・CmnLogoutToken・SigningKeys
追加 CommonLibrary/SamlProviders/:CmnSaml2Response・CmnSamlAttributes・CmnSamlMetadata・IdFederationSaml2Metadata・IdFederationSaml2Request
追加 CommonLibrary/Data/EnumSessionStoreType、CommonLibrary/Manager/MobileAppTokenProvider
削除 CommonLibrary/Extensions/FIDO/MsPassHelper・FIDO/DataProvider(FIDO 系の作り直し)、ViewModels/ManageAddPaymentInformationViewModel、net48 版の Fido2ServerController
  • 汎用的な部品の一部は、Open 棟梁へ移した(OTR #634。DPoPProof・RemoteJwkSetStore・SAML2Metadata など)。
    汎用認証サイト側で移した後の部品に切り替える作業(「OTR移行後取込」)は、作業中ブランチにある。

後方互換性

変更 影響
subject_types の既定 public、uname の廃止(#151) sub の値が変わりうる。対応表(SubjectIdentifier)で引き継ぐ
redirect_uri の厳密比較(#263) 大文字小文字の違う登録値では通らない
PKCE・Implicit / ROPC の既定(#220) 雛形のままでは Implicit / ROPC が使えない(設定で戻せる)
有効期限の検証(#188・#229) 期限切れの code・refresh_token・Request Object が拒否される
DDL の追加・変更(ConsentGrant・SubjectIdentifier・FIDO2Data ほか) 既存の DB にスキーマの移行が要る(CompareDdl.ps1 で突き合わせ)
WebAuthn(#137) net48 版では使えない。net10.0 版は登録をやり直す

作業中ブランチ(develop に未マージ)

注(2026-11-01):この節の変更は、その後 develop にマージされた(PR #319・#326。d72c6a0f)。未リリースであることは変わらない。本文への統合は、まだ行っていない。この節は 2026-10-28 時点の記録である。

develop にもまだ入っていない。 5th_agent ブランチ(2026-10-23 〜 10-28、56 コミット。#294 が 55、#314 が 1)の内容で、
レビュー・マージの前なので、変わりうる。

Issue 内容
#294(C-26) 独自 scope userid を廃止:pairwise のクライアントにも、共通の利用者 ID を渡していた。自己テスト用の StandardScopes は SelfTestScopes に改名
#294(C-27) 独自 scope auth は、登録に明記したクライアントだけ有効:以前は、要求に auth を付けるだけで、どのクライアントも同意画面を飛ばせた(OIDC Core §3.1.2.4・§3.1.2.6)
#294 設定の再編:設定を CommonLibrary/Co/ の Config.*(Account・Deployment・ExternalLogin・IdFederation・Notification・Sts・Sts.Endpoints・Sts.Features・Sts.Protection)に分割。定数の整理、リテラルの定数化・リソース化(Resources/Diagnostics)
#294 クライアントの登録種別の項目名を oauth2_oidc_mode → client_mode に改名
#294 AccountController を partial class に分割(Authorize・ExternalLogin・Helper・IdFederation・Saml2・SelfTest・SignIn・SignUp・TwoFactor。net10.0 版と net48 版で同期)。DCR の Provider を 4 分割。DataProvider → Saml2OAuth2DataProvider
#294 DCR の修正:更新で所有者が消える、クライアントの削除で同意が残る、管理画面で EC の公開鍵が持ち越されない
#294 エラー応答を OPERATION ログに記録、外部ログインの失敗の理由を記録。Core 版の利用者名の文字の制限を AllowOnlyAlphanumericUserNames に合わせた
#294 Open 棟梁へ移した部品への切り替え(「OTR移行後取込」):JwkSetDocument・DiscoveryJwks・CmnSamlAttributes を削除し、Open 棟梁(OTR #634)の部品を使う。Util/IdP/UserIdentifier を追加
#294 設計の経緯を DesignNotes/(AccountController.md・ClientRegistrationProvider.md)に移し、ソースのヘッダの更新履歴を圧縮
#314 EnableImplicitGrantType が false のとき、access_token をフロント・チャネルで返す Hybrid / OIDC の Implicit(code token・code id_token token・id_token token)も断り、discovery で広告しない(code id_token は通る)。設定キー EnableOpenIDConnect を削除。テストに -NoImplicit を追加

後方互換性に影響する変更(マージされた場合)

変更 影響
独自 scope userid の廃止(C-26) 要求すると invalid_scope になりうる
独自 scope auth の登録要(C-27) 同意画面を飛ばしていたクライアントは、登録に auth を明記する必要がある
登録種別の項目名 client_mode 設定・DB の項目名の書き換えが要る
設定の再編、EnableOpenIDConnect の削除(#314) 設定ファイルの移行が要る
Implicit を閉じた配備での Hybrid の拒否(#314) code token などを使う RP は、EnableImplicitGrantType を true にするか、フローを変える
Open 棟梁の部品の利用 Open 棟梁の 03-30(OTR #634 を含む版)が必要

参考


Tags: 再構築

NetDevInfraWiki

マイクロソフト系技術情報 Wiki
Open 棟梁 Wiki
開発基盤部会 Wiki

移行管理: DONE / TODO

Clone this wiki locally