Logto 製品アップデート
Logto v1.43.0 には、OAuth Client ID Metadata Document を用いたダイナミックアプリ、署名付き SAML 認証リクエスト、制限付き Custom JWT および Actions ランタイム、より強化されたトークン交換バリデーション、ウェブフックとエンタープライズ SSO の SSRF 保護範囲の拡大などが追加されました。
Logto v1.43.0 には、OAuth Client ID Metadata Document を用いたダイナミックアプリ、署名付き SAML 認証リクエスト、制限付き Custom JWT および Actions ランタイム、より強化されたトークン交換バリデーション、ウェブフックとエンタープライズ SSO の SSRF 保護範囲の拡大などが追加されました。
Logto v1.43.0 は、アプリケーションとエンタープライズ ID プロバイダーの接続方法を拡張し、トークンやアウトバウンドリクエストのセキュリティ境界を強化します。OAuth Client ID Metadata Document を利用したダイナミックアプリや、署名付き SAML 認証リクエスト、Custom JWT と Actions の統合ランタイムを導入しました。本リリースでは、トークン交換、ウェブフック、エンタープライズ SSO がさらに堅牢になり、Account Center の改善、スペイン語(メキシコ)対応、信頼性の向上も含まれています。新機能の詳細は以下です。
サインイン体験が es-MX(スペイン語・メキシコ)をサポートしました。
ユーザー言語がスペイン語(メキシコ)の場合、電話番号入力はデフォルトでメキシコの国番号(+52)になります。リストフォーマッタのプレースホルダーやスペイン語ロケールで未翻訳だった MFA メッセージも修正されています。
Management API を通じて構成されたアウトバウンドリクエストは、ループバック、プライベート、リンクローカル、クラウドメタデータ、その他の特別用途アドレスへの解決時にブロックされるようになりました。
保護範囲は以下をカバーします:
POST /api/hooks/:id/test を含む)DNS 名は接続確立時にチェックされ、保護対象のアドレスに解決されるホスト名は、リテラル IP アドレス同様に拒否されます。
ファーストパーティな subject トークンが必須なことに加え、Logto は access_token サブジェクトとして提示される JWT が実際にアクセストークンであることをバリデーションします。
JWT には以下が必要です:
at+jwt タイプヘッダーclient_id クレームOIDC ID トークンや、テナントが署名したその他の JWT をアクセストークン代わりに用いることはできなくなりました。不正な subject トークンは invalid_grant で拒否されます。
サードパーティアプリケーションは、Account API および Verification API を通じてアカウントデータを変更できなくなりました。該当リクエストは現在次のように返します:
Account Center および Console を含むファーストパーティアプリケーションは影響を受けません。
クライアント識別子が解決できない場合も拒否対象となります(削除済みアプリや、識別子がメタデータ URL である CIMD クライアントを含む)。
読み取りルートには新たな直接ガードは追加されていませんが、以下の取得 API はガードされたルート経由で作成された検証記録が必要となるため、サードパーティアプリからはアクセスできなくなりました:
GET /api/my-account/grantsGET /api/my-account/sessionsGET /api/my-account/mfa-verifications/backup-codesトークン発行およびユーザー情報取得で、停止中ユーザーも invalid_grant で拒否されます。これは既存の削除済みユーザーの挙動に一致します。
これはリフレッシュトークン、認可コード、デバイスコード、トークン交換フロー全体に適用され、たとえ以前のトークンやセッションの無効化処理が正常に完了しなかった場合でも同様です。
サードパーティアプリケーションの同意設定からユーザースコープを削除すると、既存の認可にも即座に反映されるようになりました。
invalid_scope で失敗します。insufficient_scope で失敗します。Sentinel ロックアウトカウンタは、アカウント検索で用いる正規化済み識別子フォームに統一されました:
これにより、同一識別子でスペル違いの複数ロックアウトバケットができ maxAttempts が弱まる問題を防ぎます。
手動アンロック時にも、同じアカウントに紐づく等価なスペルのロックアウトが一括で解除されます。アップグレード後、非正規スペルの既存ロックアウトは早期終了する場合がありますが、以前よりロックアウトが強化されることはありません。
redirect_to は http または https 必須ES256、P-384 なら ES384、P-521 なら ES512)をアドバタイズするようになりました。invalid_scope および insufficient_scope エラーメッセージで、リジェクトされたスコープ名を適切に表示するよう修正。Accept-Language クオリティ値(例:en; q=0.7)も正しくパースされます。不正クオリティ値は安全にフォールバックし NaN になりません。gmail.com と googlemail.com を等価扱いし、ローカル部分のドットも無視されるようになりました。custom_profile_fields.entity_not_exists_with_names エラーが出なくなりました。POST /applications/:applicationId/user-consent-scopesPOST /organizations/:id/users/:userId/roles
)Webhook の POST リクエストは、エンドポイントが HTTP 5xx を返した場合最大3回までリトライします(ドキュメントどおりの配信契約に準拠)。
リトライされたイベントは複数回届く可能性があるため、受信側は冪等にイベント処理してください。
Microsoft Azure AD コネクタが disableEmailSync オプションをサポートしました。
デフォルトでは、Microsoft Graph の mail 属性を Logto ユーザープロファイルにコピー(同期)します。この同期を行わず認証だけを行いたい場合、このオプションを有効にしてください(Azure OIDC エンタープライズ SSO で既存の制御方式と一致)。
要対応 — アウトバウンドリクエスト保護: ウェブフックやエンタープライズ SSO コネクタで意図的にプライベートネットワーク上のサービスへアクセスする場合、アップグレード前に必要な IP アドレスまたは CIDR レンジを SSRF_ALLOWED_ADDRESSES に追加してください:
必要な宛先のみホワイトリスト化するほうが、保護全体の無効化より安全です。
ダイナミックアプリ互換性: SSRF_ALLOWED_ADDRESSES 設定時は CIMD が無効化され、認証されていないダイナミッククライアントはこのリストを使ったプライベートサービス到達ができません。SSRF_PROTECTION_DISABLED=true 設定も CIMD を無効化します。
構成互換性: OIDC_PROVIDER_SSRF_PROTECTION_DISABLED は SSRF_PROTECTION_DISABLED のエイリアスとして引き続きサポートされます。これらの変数はセルフホスト版のみ有効です。
スクリプトランタイム制限: Custom JWT および Actions スクリプトは 5秒以内に完了し、128MB ワーカーのメモリ予算内で動作し、JSON シリアライズ可能な値を返す必要があります。
データベースマイグレーション必須: 本リリースでは新しいスキーマ変更やインデックスが含まれています。アップグレード後は、新バージョン起動前にデータベース変更コマンド(@logto/cli または core イメージで npm run alteration deploy、もしくは logto db alteration deploy)を実行してください。詳しくは アップグレードガイド を参照。
このリリースに貢献されたコミュニティメンバーに感謝します:
Accept-Language クオリティ値パース (#9338)全変更はこちらの 完全なチェンジログ を参照してください。