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

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接続Management APIエンドポイントを使用して、ある特定のテナント内での既存のカスタムソーシャル接続すべてをページネーションできます。たとえば、以下のクエリオプションは、最大100のカスタムソーシャル接続の名前と識別子を返します。

/api/v2/connections?strategy=oauth1&strategy=oauth2&include_totals=true&fields=name&per_page=100

Was this helpful?

/

Auth0 Dashboardは、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

  • jwt

  • 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モジュールバージョンの削除

モジュール バージョン
@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

モジュール バージョン
@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

TLS接続にデフォルトで必要となる安全な再ネゴシエーション

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

Error: write EPROTO C0BAF076:error:0A000152:SSL routines:final_renegotiate:unsafe legacy renegotiation disabled:../deps/openssl/openssl/ssl/statem/extensions.c:922:

Was this helpful?

/

このセキュリティに関する変更を考慮して、ターゲットサーバーすべてが、安全な再ネゴシエーションをサポートするようにアップデートされていることを確認してください。管理下にないサードパーティーのサーバーの場合は、以前の動作にオプトインする可能性を評価します。

たとえば、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
      }
    )
  })

Was this helpful?

/

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
      }
    )
  })

Was this helpful?

/