メインコンテンツへスキップ
Node.js 12 および 16 の長期サポート (LTS) は 2023 年に終了しました。これは、Node.js 開発チームがこれらのバージョンに対する重要なセキュリティ修正をバックポートしなくなったことを意味します。Node 12 または 16 のランタイムで実行すると、拡張機能コードがセキュリティ上の脆弱性にさらされる可能性があります。 Node 18 の拡張機能ランタイムは、拡張機能製品群全体で一般提供 (GA) されています。これには、Actions、Rules、Hooks、Database Scripts、カスタムソーシャル接続が含まれます。コード セキュリティのベストプラクティスに従うため、できるだけ早く Node 18 に更新することを強くお勧めします。

一般的な考慮事項

Rules と Hooks を Actions に移行する

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

Marketplace の統合

ソーシャル接続の統合

Management API を使用すると、Node ランタイムのバージョン変更の影響を受ける可能性があるソーシャル接続の完全な一覧を特定できます。特に、カスタムのソーシャル接続として明示的に作成されたものや、Marketplace 経由で最初に追加されたものなど、影響を受ける可能性があるすべてのソーシャル接続では、strategy 属性の値が oauth1 または oauth2 のいずれかです。 その後、GET connections エンドポイントを使用して、特定のテナント内にある既存のカスタムのソーシャル接続をすべてページネーションしながら取得できます。たとえば、次のクエリオプションでは、最大 100 件のカスタムのソーシャル接続の名前と識別子を返します。
/api/v2/connections?strategy=oauth1&strategy=oauth2&include_totals=true&fields=name&per_page=100
では、Marketplace 経由で追加したカスタムのソーシャル接続のスクリプトは更新できません。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 (Recommended) を選択します。
  4. Node 18 でカスタム Actions を作成し、準備ができたらテストしてデプロイします。

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

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

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

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

既知の破壊的変更

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 されていることを確認する必要があります。 Rules、カスタムデータベース接続、およびカスタムソーシャル接続では、Node 18 で利用可能として一覧表示されている バージョンのモジュールを明示的に require する必要があります。 Hooks と Actions では、モジュールを require する前に、目的のバージョンを明示的な依存関係として追加する必要があります。

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

Can I Require で、Node 18 ランタイムにおける以下のモジュールの指定バージョンのサポートが削除されました。この変更は、Rules、カスタムデータベース接続スクリプト、カスタムソーシャル接続スクリプトに関連する拡張機能コードに影響します。
Marketplace で提供されている次のカスタムソーシャル接続 (Indeedmonday.comSnapchatTumblr) のユーザープロフィール取得スクリプトでは、Node 18 では利用できない axios モジュールのバージョン 0.22.0 が使用されていました。これらの接続のいずれかを使用している場合は、Management API を使用して、必要に応じてスクリプトを確認および更新してください。
モジュールバージョン
@analytics/google-analytics0.4.0
@auth0/hapi13.5.1, 13.6.0
@auth0/rule-utilities0.1.0
@gitbeaker/node17.0.1
@incognia/api1.0.0
@octokit/rest15.8.2
@sentry/node5.6.2, 5.15.5, 6.2.0
acorn1.2.2
airbrake1.0.2
airgram3.1.1
ajv6.10.1
amazon-dax-client1.2.2
amazon-mws-node1.0.3
analytics0.5.1
analytics-node2.0.1, 3.5.0
applicationinsights0.15.8, 0.18.0, 1.5.0, 1.8.8
async1.0.0, 0.9.0, 2.1.2, 2.6.1
auth02.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-api4.0.0
auth0-ext-template-renderers0.4.2
auth0-extension-express-tools1.0.2, 1.1.5, 1.1.6, 2.0.0
auth0-extension-hapi-tools1.0.0, 1.1.0, 1.2.0, 1.2.1, 1.2.2, 1.3.0
auth0-extension-tools1.0.0, 1.2.1, 1.3.1, 1.3.2, 1.4.0
auth0-magic3.1.0
auth0-oauth2-express0.0.1, 0.0.3, 1.1.5
auth0-source-control-extension-tools3.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-sdk2.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
axios0.15.2, 0.18.0, 0.19.2, 0.21.1, 0.21.3, 0.22.0, 0.27.2
azure0.10.6
azure-storage0.4.4, 0.4.1, 0.9.0
babel5.4.7, 5.1.9
bcrypt4.0.0
bluebird2.9.26, 3.4.6
body-parser1.12.4
boom2.7.2
botbuilder0.9.0
bson0.3.2, 4.4.0
cookie-parser1.3.5
datadog-metrics0.8.2, 0.9.0, 0.9.2, 0.9.3
disposable-email-domains1.0.14, 1.0.15, 1.0.56
dockerode2.1.4, 2.0.3
dotenv0.4.0, 2.0.0
easy-pbkdf20.0.2
ejs2.3.1
engine.io-client1.5.1
express4.12.4, 4.14.0, 4.16.3
express-jwt3.1.0, 5.1.0
faunadb2.11.1, 4.1.1
filter-object2.1.0
firebase7.12.0
firebase-admin4.0.4, 5.0.0, 6.0.0, 8.0.0, 8.12.1
form-data0.2.0
getstream3.4.1
gitlab1.7.0
google-auth-library1.0.0
google-libphonenumber2.0.7, 3.2.8, 3.2.10
googleapis2.1.6, 34.0.0
got3.2.0, 9.2.1, 10.7.0, 11.3.0, 11.5.2
hapi13.5.0
hapi-auth-jwt27.0.1
hapi-swagger7.4.0
hoek2.14.0
http-proxy1.11.1
ibm_db2.6.4
ip0.3.2, 0.0.1
ipaddr.js1.0.1
joi6.10.1
jose3.19.0
jsforce1.6.0
jsonwebtoken5.7.0, 5.0.1, 5.0.0, 7.1.9, 8.5.0
jwks-rsa1.0.0, 1.1.1, 1.6.0
ldapjs1.0.0
lodash3.10.1, 3.9.3, 2.4.1, 4.8.2, 4.17.10, 4.17.19
lru-cache2.6.4
mixpanel0.4.0
mkdirp0.5.1
moment2.10.3, 2.11.2
mongodb2.0.48, 2.0.33, 2.0.27, 2.2.11, 3.1.4, 4.1.0, 3.6.10, 3.5.11
mongoose4.1.6
morgan1.5.3
mysql2.7.0, 2.6.2, 2.0.0-alpha8, 2.15.0
mysql21.5.3
nano6.2.0
neo4j-driver1.7.1
node-fetch2.6.0
node-jose0.9.2
node-rdkafka2.10.1
nodemailer2.5.0
nsp2.4.0
oauth0.9.12
passport-wsfed-saml22.11.4
pg4.5.7, 4.3.0, 4.1.1, 6.1.2, 7.17.1
postmark1.3.1
q1.0.1
qs3.1.0
ramda0.18.0, 0.23.0
range_check0.0.1
raw-body2.1.0
react15.3.2
redis0.12.1
request2.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
rethinkdb2.1.1, 2.0.0-1, 2.0.0
rollbar0.6.2, 2.12.2
semver4.3.4
sendgrid1.8.0, 3.0.7
sequelize3.1.1
soap0.23.0
socket.io1.3.5
socket.io-client1.3.5
splunk-bunyan-logger0.9.1
ssh20.4.13
stamplay1.0.6, 1.0.5, 1.0.3
stripe3.3.4, 4.14.0, 4.24.0, 7.1.0, 7.4.0, 8.52.0
sumo-logger1.5.5
superagent1.2.0, 3.8.3, 4.1.0
tedious6.6.2, 1.11.0, 0.1.4, 8.3.1, 9.2.1
tough-cookie1.2.0
twilio2.2.1, 3.6.0, 3.57.0
twit1.1.20
uuid2.0.3, 2.0.1, 3.1.0, 3.3.2, 7.0.3, 8.0.0
vso-node-api3.1.1
watson-developer-cloud2.0.1
winston1.0.0, 0.8.1, 3.1.0
xml2js0.4.8, 0.2.8
xmlbuilder2.6.4
xmldom0.1.19, 0.1.13
xpath0.0.5
xtend1.0.3

TLS 接続ではデフォルトでセキュアな再ネゴシエーションが必要

Node.js 18 では、基盤となる OpenSSL 依存関係にこの要件が導入されたため、TLS 接続ではデフォルトでセキュアな再ネゴシエーション (RFC 5746) が必要です。 拡張機能コードで外部ネットワークへの呼び出しを行う場合、接続先サーバーはセキュアな再ネゴシエーションをサポートしている必要があります。サポートしていないと、リクエストは失敗し、次のようなエラーが発生します。
Error: write EPROTO C0BAF076:error:0A000152:SSL routines:final_renegotiate:unsafe legacy renegotiation disabled:../deps/openssl/openssl/ssl/statem/extensions.c:922:
このセキュリティ関連の変更を踏まえ、すべての対象サーバーが安全な再ネゴシエーションをサポートするよう更新されていることを確認することを推奨します。対象のサーバーがお客様の管理下にないサードパーティ製サーバーである場合は、以前の動作を明示的に有効にすることを検討できます。 たとえば、axios ライブラリでは、次のコードスニペットはレガシー動作を明示的に有効にする方法を示しています。
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
      }
    )
  })