• リリース

Logto 製品アップデート

Logto v1.39.0 がリリースされました。より安全な署名キーのローテーション、賢くなった JWT スクリプトのエラー処理、拡張されたアカウントセンターのセキュリティ管理、WhatsApp コネクタのサポート、そしてキーセキュリティの改善が導入されています。

Simeng
Simeng
Developer

ユーザー認証に何週間も費やすのはもうやめましょう
Logto でより速く安全なアプリをリリース。数分で認証を統合し、コア製品に集中できます。
始めましょう
Product screenshot

Logto v1.39.0 をご紹介できることを嬉しく思います。このリリースは、より強力な運用の安全性、柔軟なトークンカスタマイズ、そしてエンドユーザーのアカウントセキュリティの向上に焦点を当てています。このバージョンでは、秘密署名キーのローテーションに柔軟期間を導入し、カスタム JWT スクリプトのエラーハンドリングを設定可能とし、新しいアカウントセンターのセキュリティページや、Meta Cloud API 経由での WhatsApp コネクタサポート、そして認証フロー全体で複数のセキュリティと信頼性の改善が追加されています。

ハイライト

  • 秘密署名キーのローテーション猶予期間: Logto は署名キーのローテーション時にグレース期間をサポートし、クライアントがダウンタイムなしでキャッシュされた JWKS を更新できるようになりました。
  • カスタム JWT スクリプトのエラーハンドリング: アクセストークンとクライアントクレデンシャル JWT のカスタマイズで、スクリプト実行失敗時にトークン発行をブロックできるようになりました。
  • アカウントセンターのセキュリティページ: エンドユーザーがアカウントセンターからソーシャルアカウントの連携、MFA、アカウント削除を管理できるようになりました。
  • WhatsApp コネクタ: Meta Cloud API を通じて利用できる WhatsApp SMS コネクタが新たに追加されました。
  • セキュリティと互換性の修正: パスワード忘れ時の認証応答が統一され、アカウント特定リスクを低減。アプリ内ブラウザでのソーシャル/SSOリダイレクトもより耐障害性が高くなりました。

新機能 & 強化点

秘密署名キーのローテーション猶予期間

Logto は秘密署名キーのローテーション中に猶予期間をサポートするようになりました。

設定方法:

  • PRIVATE_KEY_ROTATION_GRACE_PERIOD 環境変数
  • --gracePeriod CLI オプション

猶予期間中は:

  • 新しく生成された署名キーが Next としてマークされます。
  • 既存の署名キーは Current として引き続き有効です。
  • クライアントは新しいキーが有効になる前にキャッシュされた JWKS を更新する猶予があります。

猶予期間終了後は:

  • 新しい署名キーが Current に移行します。
  • 古い署名キーは Previous としてマークされます。

これにより、よりスムーズなキーのローテーションが可能となり、古い JWKS キャッシュによる認証失敗を防げます。

ドキュメント: 署名キーをローテーションする

カスタム JWT スクリプトのエラーハンドリング

Logto でアクセストークンおよびクライアントクレデンシャルフローで利用されるカスタム JWT スクリプトのエラーハンドリングが設定可能になりました。

含まれる変更点:

  • カスタム JWT スクリプトが失敗した際にトークン発行をブロック可能に。
  • api.denyAccess()access_denied 応答として維持されます。
  • それ以外のブロッキングモードのスクリプト失敗は、ローカライズされた invalid_request 応答として返されます。
  • コンソールに エラーハンドリング 専用タブが追加され、振る舞いを設定できます。
  • 新規作成したスクリプトはデフォルトで blockIssuanceOnError が有効化されています。
  • 保存値のない既存スクリプトは従来通り無効のままになります。
  • 関連するコンソールガイダンス・文言・スキーマ・統合対応も更新されました。

これにより開発者は、トークンカスタマイズ失敗時にセキュリティ要求に応じて open/fail closed を選択できます。

アカウントセンターのセキュリティページ

本リリースでアカウントセンターに新しいセキュリティページが追加されました。

エンドユーザーは /account/security からアカウントセキュリティを管理できます。内容:

  • ソーシャルアカウントの連携・解除
  • MFA・2段階認証
  • アカウント削除

コンソール対応:

  • サインイン体験のアカウントセンター設定にてアカウント削除 URL フィールドを公開。
  • コンソール画面でアカウントセンターやソーシャルプリセット UI エントリも表示されます。

Meta Cloud API による WhatsApp コネクタ

Meta Cloud API 経由でメッセージ送信を行う WhatsApp コネクタが新たに追加されました。

公式 Meta Cloud API 統合を使った WhatsApp ベースの SMS/認証コード配信シナリオが利用可能となります。

Organization 配属 API レスポンスボディ

組織ユーザーおよびロールアサインメント API が応答ボディを返すようになりました。

更新されたエンドポイント:

  • POST /organizations/:id/users はリクエストで送信したユーザーIDのエコーで { userIds: string[] } を返します。
  • POST /organizations/:id/users/:userId/roles では、割り当て後の重複排除済み最終ロールIDを { organizationRoleIds: string[] } で返します(ロール名から解決されたIDを含む)。

コンソールテーマトークン更新

コンソールテーマに、ライト・ダーク両モードで不足していた --color-overlay-primary-subtle トークンが追加されました。

バグ修正 & 安定性

パスワードリセット確認の列挙耐性強化

パスワードリセット確認時、統一された verification_code.code_mismatch エラーのみを返すようになりました。

これによりメール・電話番号が存在するか否かを異なるエラー応答から判別できなくなります。

アプリ内ブラウザのソーシャルと SSO リダイレクト

Instagram、Facebook、LINE 等のアプリ内ブラウザでもソーシャル/SSOリダイレクトの信頼性が改善されました。

一部アプリ内ブラウザでは OAuth ID プロバイダページを新しい WebView で開くため、リダイレクト後 sessionStorage が失われてしまうことがありました。

このリリースで localStorage フォールバックが追加されます:

  • リダイレクト状態は引き続き sessionStorage に保存。
  • バックアップのリダイレクトコンテキストバンドルも localStorage に保存します。
  • コールバック時、sessionStorage が無い場合は localStorage から状態を復元します。
  • フォールバックエントリは読込時に消費され、10分後に自動削除されます。
  • 両方のストレージが空の場合、ユーザーにはエラートーストが表示されます。

認証コードコネクタリクエストの IP

認証コード送信時に、コネクタへリクエスト IP が渡されない問題を修正しました。

コネクタ側で適切な認証コード配信コンテキストを取得できるようになります。