> ## Documentation Index
> Fetch the complete documentation index at: https://docs-staging-feat-sdk-reference-docs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Node.js v12+6 から Node.js v18 への移行の影響を受ける Auth0 Actions の項目について説明します。

# Node 12 および 16 から Node 18 への移行

Node.js 12 と 16 の長期サポート (LTS) は 2023 年に終了しました。つまり、Node.js 開発チームはこれらのバージョンに対する重大なセキュリティ修正を、もはやバックポートしていません。Node 12 または 16 のランタイムを使用すると、拡張コードがセキュリティ上の脆弱性にさらされるおそれがあります。

Node 18 の拡張ランタイムは、拡張機能スイート全体で一般提供 (GA) されています。これには、Actions、ルール、フック、データベーススクリプト、カスタムソーシャル接続が含まれます。コードのセキュリティに関するベストプラクティスに従うため、できるだけ早く Node 18 へ更新することを強くお勧めします。

<h2 id="general-considerations">
  一般的な注意点
</h2>

<h3 id="migrate-rules-and-hooks-to-actions">
  ルールとフックを Actions に移行する
</h3>

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

<h3 id="marketplace-integrations">
  マーケットプレイス連携
</h3>

<h4 id="social-connections-integrations">
  ソーシャル接続の連携
</h4>

Node `runtime` バージョンの変更によって影響を受ける可能性があるソーシャル接続の完全な一覧を特定するには、[Management API](https://auth0.com/docs/api/management/v2) を使用します。特に、カスタムソーシャル接続として明示的に作成されたものと、マーケットプレイス経由で追加されたもののいずれについても、影響を受ける可能性があるソーシャル接続には、`strategy` 属性の値として `oauth1` または `oauth2` が設定されています。

その後、`GET` 接続 <Tooltip tip="Management API: お客様が管理タスクを実行できるようにするプロダクト。" cta="用語集を表示" href="/docs/ja-jp/glossary?term=Management+API">Management API</Tooltip> エンドポイントを使用すると、特定のテナント内にある既存のカスタムソーシャル接続をページネーションしながら確認できます。たとえば、次のクエリオプションでは、最大 100 件のカスタムソーシャル接続の名前と識別子が返されます。

```http wrap lines theme={null}
/api/v2/connections?strategy=oauth1&strategy=oauth2&include_totals=true&fields=name&per_page=100
```

<Tooltip tip="Auth0 Dashboard: サービスを設定するための Auth0 の主要製品。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=Auth0+Dashboard">Auth0 Dashboard</Tooltip> では、マーケットプレイス経由で追加したカスタムソーシャル接続のスクリプトは更新できません。Node 18 との互換性を確保するためにスクリプトの変更が必要な場合は、Management API を使用する必要があります。

<h2 id="migration-tasks">
  移行作業
</h2>

<h3 id="create-new-custom-actions">
  新しいカスタム Actions を作成
</h3>

Auth0 Dashboard で Node 18 を使用して新しいカスタム Action を作成するには、次の手順に従います。

1. [Auth0 Dashboard > Actions > Library](https://manage.auth0.com/#/dashboard/actions/library) に移動します。
2. **Create Action > Build from scratch** を選択します。
3. **Runtime**\* フィールドで **Node 18 (推奨) ** を選択します。
4. Node 18 でカスタム Action を記述し、テストして、準備ができたらデプロイします。

<h3 id="upgrade-existing-custom-actions">
  既存の カスタム Actions をアップグレードする
</h3>

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

<h3 id="choose-node-18-for-other-extensibility-products">
  その他の拡張製品では Node 18 を選択する
</h3>

残りの (Actions 以外の) 拡張機能で使用されるランタイムは、テナントの詳細設定でグローバルに定義されます。この設定を変更すると、次の機能に同時に影響します。

* ルール
* Hooks
* カスタム DB スクリプト
* カスタムソーシャル接続スクリプト

Auth0 Dashboard でテナントの拡張ランタイム設定を変更するには、次の手順に従います。

1. **Dashboard > Settings > Advanced** に移動します。
2. **Extensibility** セクションまでスクロールします。
3. **Runtime** で **Node 18** を選択します。

これは複数の拡張機能に同時に影響するグローバル設定であるため、まず開発テナントでこの手順を実行し、該当するすべての拡張機能をテストしてください。開発環境で問題がないことを確認してから、本番テナントに進むことをお勧めします。

特に Custom DB スクリプトについては、グローバルのランタイムバージョンを変更する前に、[このページで説明されている手順に従って](/docs/ja-jp/authenticate/database-connections/custom-db/custom-database-connections-scripts/environment)、特定のランタイムバージョンに対してスクリプトを個別に検証できます。

<h2 id="known-breaking-changes">
  既知の互換性のない変更
</h2>

<h3 id="magic-npm-modules">
  Magic npm モジュール
</h3>

Node 12 の拡張ランタイムでは、拡張コード内で明示的に `require` しなくても、特定の `npm` モジュールを使用できました。Node 16 ランタイム以降、このような使い方は次のモジュールではサポートされなくなりました。

* \_
* async
* Auth0
* azure\_storage
* bcrypt
* crypto
* couchbase
* cql
* ip
* <Tooltip tip="JSON Web トークン (JWT): 2 者間でクレームを安全に表現するために使用される標準の ID トークン形式（多くの場合はアクセストークン形式でもあります）。" cta="用語集を見る" href="/docs/ja-jp/glossary?term=jwt">jwt</Tooltip>
* 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 で利用可能として一覧表示されている](https://auth0-extensions.github.io/canirequire/)バージョンのモジュールを明示的に `require` する必要があります。

フックおよび Actions では、モジュールを `require` する前に、使用する対象バージョンを明示的な依存関係として追加する必要があります。

<h3 id="can-i-require-module-versions-removed">
  Can I Require で削除されたモジュールバージョン
</h3>

[Can I Require](https://auth0-extensions.github.io/canirequire/) から、Node 18 ランタイム向けの以下のモジュール指定バージョンのサポートを削除しました。この変更は、ルール、カスタムデータベース接続スクリプト、カスタムソーシャル接続スクリプトに関連する拡張コードに影響します。

<Warning>
  マーケットプレイスで提供されている以下のカスタムソーシャル接続 ([Indeed](https://marketplace.auth0.com/integrations/indeed-social-connection)、[monday.com](https://marketplace.auth0.com/integrations/monday-com-monday-com-social-connection)、[Snapchat](https://marketplace.auth0.com/integrations/snapchat-social-connection)、[Tumblr](https://marketplace.auth0.com/integrations/tumblr-social-connection)) のユーザープロファイル取得スクリプトでは、Node 18 では利用できない `axios` モジュールのバージョン `0.22.0` が使用されていました。これらの接続のいずれかを使用している場合は、必要に応じて [Management API](https://auth0.com/docs/api/management/v2) からスクリプトを確認し、更新してください。
</Warning>

| モジュール | バージョン |
| - | - |
| @analytics/google-analytics | 0.4.0 |
| @auth0/hapi | 13.5.1, 13.6.0 |
| @auth0/rule-utilities | 0.1.0 |
| @gitbeaker/node | 17.0.1 |
| @incognia/api | 1.0.0 |
| @octokit/rest | 15.8.2 |
| @sentry/node | 5.6.2, 5.15.5, 6.2.0 |
| acorn | 1.2.2 |
| airbrake | 1.0.2 |
| airgram | 3.1.1 |
| ajv | 6.10.1 |
| amazon-dax-client | 1.2.2 |
| amazon-mws-node | 1.0.3 |
| analytics | 0.5.1 |
| analytics-node | 2.0.1, 3.5.0 |
| applicationinsights | 0.15.8, 0.18.0, 1.5.0, 1.8.8 |
| async | 1.0.0, 0.9.0, 2.1.2, 2.6.1 |
| auth0 | 2.4.0, 2.1.0, 2.0.0, 0.8.2, 2.6.0, 2.7.0, 2.8.0, 2.9.1, 2.13.0, 2.17.0, 2.17.1, 2.19.0, 2.23.0, 2.27.0, 2.27.1, 2.30.0, 2.31.0, 2.32.0, 2.34.2, 2.35.0, 2.36.1, 2.36.2, 2.39.0, 3.0.1 |
| auth0-authz-rules-api | 4.0.0 |
| auth0-ext-template-renderers | 0.4.2 |
| auth0-extension-express-tools | 1.0.2, 1.1.5, 1.1.6, 2.0.0 |
| auth0-extension-hapi-tools | 1.0.0, 1.1.0, 1.2.0, 1.2.1, 1.2.2, 1.3.0 |
| auth0-extension-tools | 1.0.0, 1.2.1, 1.3.1, 1.3.2, 1.4.0 |
| auth0-magic | 3.1.0 |
| auth0-oauth2-express | 0.0.1, 0.0.3, 1.1.5 |
| auth0-source-control-extension-tools | 3.0.10, 3.0.9, 3.1.4, 3.4.0, 3.5.1, 4.0.3, 4.0.5, 4.0.6, 4.0.7, 4.1.1, 4.1.2, 4.1.3, 4.1.5, 4.1.7, 4.1.9 |
| aws-sdk | 2.2.30, 2.1.31, 2.1.13, 2.4.13, 2.5.3, 2.197.0, 2.291.0, 2.458.0, 2.593.0 |
| axios | 0.15.2, 0.18.0, 0.19.2, 0.21.1, 0.21.3, 0.22.0, 0.27.2 |
| azure | 0.10.6 |
| azure-storage | 0.4.4, 0.4.1, 0.9.0 |
| babel | 5.4.7, 5.1.9 |
| bcrypt | 4.0.0 |
| bluebird | 2.9.26, 3.4.6 |
| body-parser | 1.12.4 |
| boom | 2.7.2 |
| botbuilder | 0.9.0 |
| bson | 0.3.2, 4.4.0 |
| cookie-parser | 1.3.5 |
| datadog-metrics | 0.8.2, 0.9.0, 0.9.2, 0.9.3 |
| disposable-email-domains | 1.0.14, 1.0.15, 1.0.56 |
| dockerode | 2.1.4, 2.0.3 |
| dotenv | 0.4.0, 2.0.0 |
| easy-pbkdf2 | 0.0.2 |
| ejs | 2.3.1 |
| engine.io-client | 1.5.1 |
| express | 4.12.4, 4.14.0, 4.16.3 |
| express-jwt | 3.1.0, 5.1.0 |
| faunadb | 2.11.1, 4.1.1 |
| filter-object | 2.1.0 |
| firebase | 7.12.0 |
| firebase-admin | 4.0.4, 5.0.0, 6.0.0, 8.0.0, 8.12.1 |
| form-data | 0.2.0 |
| getstream | 3.4.1 |
| gitlab | 1.7.0 |
| google-auth-library | 1.0.0 |
| google-libphonenumber | 2.0.7, 3.2.8, 3.2.10 |
| googleapis | 2.1.6, 34.0.0 |
| got | 3.2.0, 9.2.1, 10.7.0, 11.3.0, 11.5.2 |
| hapi | 13.5.0 |
| hapi-auth-jwt2 | 7.0.1 |
| hapi-swagger | 7.4.0 |
| hoek | 2.14.0 |
| http-proxy | 1.11.1 |
| ibm\_db | 2.6.4 |
| ip | 0.3.2, 0.0.1 |
| ipaddr.js | 1.0.1 |
| joi | 6.10.1 |
| jose | 3.19.0 |
| jsforce | 1.6.0 |
| jsonwebtoken | 5.7.0, 5.0.1, 5.0.0, 7.1.9, 8.5.0 |
| jwks-rsa | 1.0.0, 1.1.1, 1.6.0 |
| ldapjs | 1.0.0 |
| lodash | 3.10.1, 3.9.3, 2.4.1, 4.8.2, 4.17.10, 4.17.19 |
| lru-cache | 2.6.4 |
| mixpanel | 0.4.0 |
| mkdirp | 0.5.1 |
| moment | 2.10.3, 2.11.2 |
| mongodb | 2.0.48, 2.0.33, 2.0.27, 2.2.11, 3.1.4, 4.1.0, 3.6.10, 3.5.11 |
| mongoose | 4.1.6 |
| morgan | 1.5.3 |
| mysql | 2.7.0, 2.6.2, 2.0.0-alpha8, 2.15.0 |
| mysql2 | 1.5.3 |
| nano | 6.2.0 |
| neo4j-driver | 1.7.1 |
| node-fetch | 2.6.0 |
| node-jose | 0.9.2 |
| node-rdkafka | 2.10.1 |
| nodemailer | 2.5.0 |
| nsp | 2.4.0 |
| oauth | 0.9.12 |
| passport-wsfed-saml2 | 2.11.4 |
| pg | 4.5.7, 4.3.0, 4.1.1, 6.1.2, 7.17.1 |
| postmark | 1.3.1 |
| q | 1.0.1 |
| qs | 3.1.0 |
| ramda | 0.18.0, 0.23.0 |
| range\_check | 0.0.1 |
| raw-body | 2.1.0 |
| react | 15.3.2 |
| redis | 0.12.1 |
| request | 2.56.0, 2.55.0, 2.27.0, 2.67.0, 2.73.0, 2.75.0, 2.81.0, 2.83.0, 2.88.0 |
| rethinkdb | 2.1.1, 2.0.0-1, 2.0.0 |
| rollbar | 0.6.2, 2.12.2 |
| semver | 4.3.4 |
| sendgrid | 1.8.0, 3.0.7 |
| sequelize | 3.1.1 |
| soap | 0.23.0 |
| socket.io | 1.3.5 |
| socket.io-client | 1.3.5 |
| splunk-bunyan-logger | 0.9.1 |
| ssh2 | 0.4.13 |
| stamplay | 1.0.6, 1.0.5, 1.0.3 |
| stripe | 3.3.4, 4.14.0, 4.24.0, 7.1.0, 7.4.0, 8.52.0 |
| sumo-logger | 1.5.5 |
| superagent | 1.2.0, 3.8.3, 4.1.0 |
| tedious | 6.6.2, 1.11.0, 0.1.4, 8.3.1, 9.2.1 |
| tough-cookie | 1.2.0 |
| twilio | 2.2.1, 3.6.0, 3.57.0 |
| twit | 1.1.20 |
| uuid | 2.0.3, 2.0.1, 3.1.0, 3.3.2, 7.0.3, 8.0.0 |
| vso-node-api | 3.1.1 |
| watson-developer-cloud | 2.0.1 |
| winston | 1.0.0, 0.8.1, 3.1.0 |
| xml2js | 0.4.8, 0.2.8 |
| xmlbuilder | 2.6.4 |
| xmldom | 0.1.19, 0.1.13 |
| xpath | 0.0.5 |
| xtend | 1.0.3 |

<h3 id="secure-renegotiation-required-by-default-for-tls-connections">
  TLS 接続ではデフォルトで安全な再ネゴシエーションが必須
</h3>

Node.js 18 では、基盤となる OpenSSL の依存関係にこの要件が導入されたことにより、TLS 接続でデフォルトで安全な再ネゴシエーション (RFC 5746) が必須となりました。

拡張コードが外部へのネットワーク呼び出しを行う場合、接続先のサーバーは安全な再ネゴシエーションをサポートしている必要があります。サポートしていないと、リクエストは失敗し、次のようなエラーが返されます。

```text wrap lines theme={null}
Error: write EPROTO C0BAF076:error:0A000152:SSL routines:final_renegotiate:unsafe legacy renegotiation disabled:../deps/openssl/openssl/ssl/statem/extensions.c:922:
```

このセキュリティに関する変更に伴い、すべての対象サーバーが安全な再ネゴシエーションに対応するよう更新されていることを確認することをお勧めします。対象のサーバーが自分で管理できないサードパーティのサーバーである場合は、以前の動作を明示的に有効にすることを検討できます。

たとえば、`axios`ライブラリでは、次のコードスニペットでレガシーな動作を明示的に有効にする方法を示しています。

```javascript lines theme={null}
const axios = require('axios');
const https = require('https');
const crypto = require('crypto');

axios.get(
  'https://[LEGACY_SERVER]', 
  {
    httpsAgent: new https.Agent(
      {
        secureOptions: crypto.constants.SSL_OP_LEGACY_SERVER_CONNECT
      }
    )
  })
```
