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を通して最初に追加されたものかを問わず、影響を受ける可能性があるソーシャル接続はすべて、oauth1
かoauth2
のいずれかの値の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を作成するには、
[Create Action(Actionを作成)]>[Build from scratch(初めから構築する)]の順に選択します。
[Runtime*(ランタイム)]フィールドで、Node 18 (Recommended)(Node 18(推奨))を選択します。
Node 18にカスタムActionsを記述し、テストして、準備が完了したらデプロイします。
既存のカスタムActionsをアップグレード
Node 12または16で構築された既存のカスタムActionsをNode 18に個々にアップグレードでき、また古いランタイムを使用して前のバージョンに戻すことができます。ActionsをNode 18にアップグレードするには、必要な変更を加えて、ランタイムでNode 18が使用されるように設定して、既存の実装の新しいバージョンを作成してデプロイします。
他の拡張製品のためにNode 18を選択する
残りの(Actions以外の)拡張オファリングに使用されるランタイムは、テナントの詳細設定レベルでグローバルに定義されます。この設定を変更すると、同時に以下の機能性に影響を及ぼします。
ルール
フック
カスタムデータベースのスクリプト
カスタムソーシャル接続のスクリプト
Auth0 Dashboardでテナントの拡張ランタイム設定を変更するには、
[Dashboard]>[Settings(設定)]>[Advanced(詳細設定)]に移動します。
[Extensibility(拡張)]セクションにスクロールします。
[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?