メインコンテンツへスキップ
Node.js 12および16の長期サポート(LTS)は、2023年に終了しました。つまり、Node.js開発チームが、重要なセキュリティ修正をこれらのバージョンにバックポートしないことを意味します。Node 12または16のランタイムで実行することは、拡張コードをセキュリティ脆弱性にさらす可能性があります。 Node 18の拡張ランタイムは、弊社の一連の拡張オファリングにおいて、一般利用可能(GA)です。これにはアクション、ルール、フック、データベーススクリプト、カスタムソーシャル接続が含まれます。コードセキュリティのベストプラクティスに従うために、できるだけ早くNode 18にアップデートすることを強くお勧めします。

一般的な考慮事項

RulesおよびHooksをActionsに移行する

廃止された拡張ランタイムを使用している場合は、(Node 18)Actionsに移行する機会として、RulesおよびHooksの実装を確認することをお勧めします。Actionsの制限を確認して、Actionsに移行できるRulesおよびHooksを判断してください。RulesおよびHooksをActionsに移行する方法については、「Actionsへの移行」をご覧ください。

Marketplaceの統合

ソーシャル接続の統合

Nodeランタイムバージョンの変更が影響を与える可能性があるソーシャル接続の全リストを確認するには、Management APIを使用します。特に、カスタムソーシャル接続として明示的に作成されたものか、Marketplaceを通して最初に追加されたものかを問わず、影響を受ける可能性があるソーシャル接続はすべて、oauth1oauth2のいずれかの値のstrategy属性を持ちます。 GET接続エンドポイントを使用して、ある特定のテナント内での既存のカスタムソーシャル接続すべてをページネーションできます。たとえば、以下のクエリオプションは、最大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で新しいカスタムActionsを作成するには、
  1. [Auth0 Dashboard]>[Actions(アクション)]>[Library(ライブラリー)]に移動します。
  2. [Create Action(Actionを作成)]>[Build from scratch(初めから構築する)] の順に選択します。
  3. [Runtime*(ランタイム)] フィールドで、Node 18 (Recommended)(Node 18(推奨)) を選択します。
  4. Node 18にカスタムActionsを記述し、テストして、準備が完了したらデプロイします。

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

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

他の拡張製品のためにNode 18を選択する

残りの(Actions以外の)拡張オファリングに使用されるランタイムは、テナントの詳細設定レベルでグローバルに定義されます。この設定を変更すると、同時に以下の機能性に影響を及ぼします。
  • ルール
  • フック
  • カスタムデータベースのスクリプト
  • カスタムソーシャル接続のスクリプト
Auth0 Dashboardでテナントの拡張ランタイム設定を変更するには、
  1. [Dashboard]>[Settings(設定)]>[Advanced(詳細設定)] に移動します。
  2. [Extensibility(拡張)] セクションにスクロールします。
  3. [Runtime(ランタイム)] で、Node 18 を選択します。
これが複数の拡張機能に同時に影響を与えるグローバル設定の場合、最初に開発テナントでこのステップを実施し、該当するすべての拡張機能のテストを完了し、開発で問題がみられない場合のみ、運用テナントに進むことをお勧めします。 Node 12拡張ランタイムは、拡張コードで明示的に要求することなく特定のnpmモジュールを使用することをサポートしています。Node 16ランタイムから、弊社は、以下のモジュールのこの種類の使用法に対するサポートを終了しました。

既知の破壊的変更

マジックnpmモジュール

まだNode 12で実行している拡張がある場合、コードをNode 18に直接アップデートする時には、上記を考慮してください。モジュールを使用する前に、明示的に要求されていることを必ず確認してください。
  • _
  • 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
Rules、カスタムデータベース接続、カスタムソーシャル接続においては、Node 18に利用可能だと記載されているモジュールのバージョンを明示的に要求する必要があります。 HooksおよびActionsにおいては、モジュールを要求する前に、明示的な依存関係として意図された対象バージョンを追加する必要があります。 Can I RequireのNode 18ランタイムについて以下にリストした特定のバージョンのモジュールに対するサポートを終了しました。この変更は、Rules、カスタムデータベース接続スクリプト、カスタムソーシャル接続スクリプトに関連する拡張コードに影響を与えます。

Can I Requireモジュールバージョンの削除

次のカスタムソーシャル接続(Indeedmonday.comSnapchat、およびTumblr)のユーザープロファイルの取得スクリプトは、Marketplaceで利用可能で、0.22.0バージョンのaxiosモジュールを使用していましたが、Node 18では利用できません。これらの接続のいずれかを使用する場合は、必要に応じて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
モジュールバージョン
@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接続にデフォルトで必要となる安全な再ネゴシエーション

拡張コードが外部ネットワーク呼び出しを行う場合、ターゲットサーバーは安全な再ネゴシエーションをサポートしていなければならず、そうでなければ要求は失敗し、以下のようなエラーを受け取ります。
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
      }
    )
  })
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
      }
    )
  })
I