Skip to main content
Node.js 12 と 16 の長期サポート (LTS) は 2023 年に終了しました。つまり、Node.js 開発チームはこれらのバージョンに対する重大なセキュリティ修正を、もはやバックポートしていません。Node 12 または 16 のランタイムを使用すると、拡張コードがセキュリティ上の脆弱性にさらされるおそれがあります。 Node 18 の拡張ランタイムは、拡張機能スイート全体で一般提供 (GA) されています。これには、Actions、ルール、フック、データベーススクリプト、カスタムソーシャル接続が含まれます。コードのセキュリティに関するベストプラクティスに従うため、できるだけ早く Node 18 へ更新することを強くお勧めします。

一般的な注意点

ルールとフックを Actions に移行する

廃止された拡張ランタイムを使用している場合は、この機会にルールとフックの実装を見直し、 (Node 18) Actions への移行を進めることをお勧めします。Actions Limitationsにアクセスして、どのルールとフックを Actions に移行できるかを確認してください。ルールとフックを Actions に移行する方法の詳細については、Migrate to Actionsを参照してください。

マーケットプレイス連携

ソーシャル接続の連携

Node runtime バージョンの変更によって影響を受ける可能性があるソーシャル接続の完全な一覧を特定するには、Management API を使用します。特に、カスタムソーシャル接続として明示的に作成されたものと、マーケットプレイス経由で追加されたもののいずれについても、影響を受ける可能性があるソーシャル接続には、strategy 属性の値として oauth1 または oauth2 が設定されています。 その後、GET 接続 エンドポイントを使用すると、特定のテナント内にある既存のカスタムソーシャル接続をページネーションしながら確認できます。たとえば、次のクエリオプションでは、最大 100 件のカスタムソーシャル接続の名前と識別子が返されます。
では、マーケットプレイス経由で追加したカスタムソーシャル接続のスクリプトは更新できません。Node 18 との互換性を確保するためにスクリプトの変更が必要な場合は、Management API を使用する必要があります。

移行作業

新しいカスタム Actions を作成

Auth0 Dashboard で Node 18 を使用して新しいカスタム Action を作成するには、次の手順に従います。
  1. Auth0 Dashboard > Actions > Library に移動します。
  2. Create Action > Build from scratch を選択します。
  3. Runtime* フィールドで Node 18 (推奨) を選択します。
  4. Node 18 でカスタム Action を記述し、テストして、準備ができたらデプロイします。

既存の カスタム Actions をアップグレードする

Node 12 または 16 で構築された既存の カスタム Actions は、個別に Node 18 にアップグレードでき、古い ランタイム を使用する以前のバージョンに戻すこともできます。Actions を Node 18 にアップグレードするには、必要な変更を加えた既存実装の新しいバージョンを作成してデプロイし、ランタイム として Node 18 を使用するように設定します。

その他の拡張製品では Node 18 を選択する

残りの (Actions 以外の) 拡張機能で使用されるランタイムは、テナントの詳細設定でグローバルに定義されます。この設定を変更すると、次の機能に同時に影響します。
  • ルール
  • Hooks
  • カスタム DB スクリプト
  • カスタムソーシャル接続スクリプト
Auth0 Dashboard でテナントの拡張ランタイム設定を変更するには、次の手順に従います。
  1. Dashboard > Settings > Advanced に移動します。
  2. Extensibility セクションまでスクロールします。
  3. RuntimeNode 18 を選択します。
これは複数の拡張機能に同時に影響するグローバル設定であるため、まず開発テナントでこの手順を実行し、該当するすべての拡張機能をテストしてください。開発環境で問題がないことを確認してから、本番テナントに進むことをお勧めします。 特に Custom DB スクリプトについては、グローバルのランタイムバージョンを変更する前に、このページで説明されている手順に従って、特定のランタイムバージョンに対してスクリプトを個別に検証できます。

既知の互換性のない変更

Magic npm モジュール

Node 12 の拡張ランタイムでは、拡張コード内で明示的に require しなくても、特定の npm モジュールを使用できました。Node 16 ランタイム以降、このような使い方は次のモジュールではサポートされなくなりました。
  • _
  • async
  • Auth0
  • azure_storage
  • bcrypt
  • crypto
  • couchbase
  • cql
  • ip
  • Knex
  • mongo
  • mysql
  • mysql_pool
  • ObjectID
  • pbkdf2
  • pg
  • postgres
  • Pubnub
  • q
  • querystring
  • sqlserver
  • uuid
  • xml2js
  • xmldom
  • xpath
  • xtend
現在も Node 12 で拡張機能を実行している場合は、コードを直接 Node 18 に更新する際に上記の点を考慮してください。モジュールを使用する前に、必ず明示的に require していることを確認する必要があります。 ルール、カスタムデータベース接続、カスタムソーシャル接続では、Node 18 で利用可能として一覧表示されているバージョンのモジュールを明示的に require する必要があります。 フックおよび Actions では、モジュールを require する前に、使用する対象バージョンを明示的な依存関係として追加する必要があります。

Can I Require で削除されたモジュールバージョン

Can I Require から、Node 18 ランタイム向けの以下のモジュール指定バージョンのサポートを削除しました。この変更は、ルール、カスタムデータベース接続スクリプト、カスタムソーシャル接続スクリプトに関連する拡張コードに影響します。
マーケットプレイスで提供されている以下のカスタムソーシャル接続 (Indeedmonday.comSnapchatTumblr) のユーザープロファイル取得スクリプトでは、Node 18 では利用できない axios モジュールのバージョン 0.22.0 が使用されていました。これらの接続のいずれかを使用している場合は、必要に応じて Management API からスクリプトを確認し、更新してください。

TLS 接続ではデフォルトで安全な再ネゴシエーションが必須

Node.js 18 では、基盤となる OpenSSL の依存関係にこの要件が導入されたことにより、TLS 接続でデフォルトで安全な再ネゴシエーション (RFC 5746) が必須となりました。 拡張コードが外部へのネットワーク呼び出しを行う場合、接続先のサーバーは安全な再ネゴシエーションをサポートしている必要があります。サポートしていないと、リクエストは失敗し、次のようなエラーが返されます。
このセキュリティに関する変更に伴い、すべての対象サーバーが安全な再ネゴシエーションに対応するよう更新されていることを確認することをお勧めします。対象のサーバーが自分で管理できないサードパーティのサーバーである場合は、以前の動作を明示的に有効にすることを検討できます。 たとえば、axiosライブラリでは、次のコードスニペットでレガシーな動作を明示的に有効にする方法を示しています。