Passer au contenu principal
Le support à long terme (LTS) de Node.js 12 et 16 a pris fin en 2023, ce qui signifie que l’équipe de développement de Node.js ne rétroporte plus les correctifs de sécurité critiques vers ces versions. L’utilisation des environnements d’exécution Node 12 ou 16 pourrait exposer votre code d’extensibilité à des failles de sécurité. L’environnement d’exécution d’extensibilité Node 18 est offert en disponibilité générale (GA) dans l’ensemble de notre gamme de solutions d’extensibilité. Cela comprend Actions, Rules, Hooks, les scripts de base de données et les connexions sociales personnalisées. Nous vous recommandons fortement de passer à Node 18 dès que possible afin de respecter les bonnes pratiques en matière de sécurité du code.

Considérations générales

Migrer les Rules et Hooks vers Actions

Si vous utilisez un environnement d’exécution d’extensibilité qui n’est plus pris en charge, nous vous recommandons de profiter de la révision de votre implémentation des Rules et Hooks pour les migrer vers Actions (Node 18). Déterminez quels Rules et Hooks vous pouvez migrer vers Actions en consultant limitation des Actions. Pour en savoir plus sur la migration de vos Rules et Hooks vers Actions, consultez Migrer vers Actions.

Intégrations du Marketplace

Intégrations de connexions sociales

Utilisez la Management API pour obtenir la liste complète des connexions sociales qui peuvent être touchées par un changement de version de l’environnement d’exécution Node.js. Plus précisément, toutes les connexions sociales potentiellement touchées, qu’elles aient été créées explicitement comme connexions sociales personnalisées ou ajoutées initialement par l’entremise du Marketplace, ont l’attribut strategy dont la valeur est oauth1 ou oauth2. Vous pouvez ensuite parcourir par pages toutes les connexions sociales personnalisées existantes dans un locataire donné à l’aide du point de terminaison GET connections . Par exemple, les options de requête suivantes renvoient les noms et les identifiants d’au plus 100 connexions sociales personnalisées :
/api/v2/connections?strategy=oauth1&strategy=oauth2&include_totals=true&fields=name&per_page=100
Le ne permet pas de mettre à jour les scripts des connexions sociales personnalisées ajoutées par l’intermédiaire de Marketplace. Si une modification du script est nécessaire pour assurer la compatibilité avec Node 18, vous devez utiliser la Management API.

Tâches de migration

Créer de nouvelles Actions personnalisées

Pour créer une nouvelle Action personnalisée avec Node 18 à partir de l’Auth0 Dashboard :
  1. Accédez à Auth0 Dashboard > Actions > Bibliothèque.
  2. Sélectionnez Create Action > Build from scratch.
  3. Dans le champ Environnement d’exécution*, sélectionnez Node 18 (Recommended).
  4. Écrivez vos Actions personnalisées avec Node 18, testez-les et déployez-les lorsque vous êtes prêt.

Mettre à niveau les Actions personnalisées existantes

Vous pouvez mettre à niveau individuellement les Actions personnalisées existantes qui utilisent Node 12 ou 16 vers Node 18 et rétablir la version précédente au moyen de l’ancien environnement d’exécution. Pour mettre à niveau les Actions vers Node 18, créez et déployez une nouvelle version de l’implémentation existante avec les modifications requises, puis configurez-la pour utiliser Node 18 comme environnement d’exécution.

Choisissez Node 18 pour les autres produits d’extensibilité

L’environnement d’exécution utilisé pour les autres offres d’extensibilité (hors Actions) est défini globalement dans les paramètres avancés du locataire. La modification de ce paramètre a une incidence sur les fonctionnalités suivantes en même temps :
  • Rules
  • Hooks
  • scripts de base de données personnalisés
  • scripts personnalisés de connexion sociale
Pour modifier le paramètre d’environnement d’exécution de l’extensibilité du locataire dans Auth0 Dashboard :
  1. Accédez à Dashboard > Settings > Advanced.
  2. Faites défiler jusqu’à la section Extensibilité.
  3. Pour environnement d’exécution, sélectionnez Node 18.
Comme il s’agit d’un paramètre global qui touche simultanément plusieurs fonctionnalités d’extensibilité, nous vous recommandons d’effectuer d’abord cette étape dans votre locataire de développement, de terminer les tests de toutes les fonctionnalités d’extensibilité applicables, puis de passer à votre locataire de production seulement lorsque vous ne constatez aucun problème en développement. Plus précisément pour les scripts Custom DB, vous pouvez suivre les étapes décrites sur cette page pour vérifier individuellement un script avec une version précise de l’environnement d’exécution avant de modifier la version globale de l’environnement d’exécution.

Changements non rétrocompatibles connus

Modules npm « magiques »

L’environnement d’exécution d’extensibilité Node 12 permet d’utiliser certains modules npm sans avoir à les inclure explicitement dans le code d’extensibilité. À partir de l’environnement d’exécution Node 16, nous avons supprimé la prise en charge de ce type d’utilisation pour les modules suivants :
  • _
  • 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
Si vous exécutez encore du code d’extensibilité sur Node 12, tenez compte de ce qui précède lorsque vous mettez directement à jour votre code vers Node 18. Avant d’utiliser un module, vous devez vous assurer qu’il est inclus explicitement. Dans le contexte des Rules, des connexions de base de données personnalisées et des connexions sociales personnalisées, vous devez inclure explicitement une version du module indiquée comme disponible pour Node 18. Dans Hooks et Actions, vous devez ajouter la version cible voulue comme dépendance explicite avant d’inclure le module.

Versions de modules supprimées de Can I Require

Nous avons supprimé, dans Can I Require, la prise en charge des versions précisées des modules énumérés ci-dessous pour l’environnement d’exécution Node 18. Ce changement a une incidence sur le code d’extensibilité associé aux Rules, aux scripts de connexion de base de données personnalisée et aux scripts de connexion sociale personnalisée.
Le script de récupération du profil utilisateur pour les connexions sociales personnalisées suivantes (Indeed, monday.com, Snapchat et Tumblr), disponibles dans le Marketplace, utilisait la version 0.22.0 du module axios, qui n’est pas disponible dans Node 18. Si vous utilisez l’une de ces connexions, examinez et mettez à jour ses scripts au besoin au moyen du Management API.
ModuleVersions
@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

La renégociation sécurisée est requise par défaut pour les connexions TLS

Node.js 18 exige par défaut la renégociation sécurisée (RFC 5746) pour les connexions TLS, en raison de l’introduction de cette exigence dans la dépendance OpenSSL sous-jacente. Si votre code d’extensibilité effectue des appels réseau externes, les serveurs cibles doivent prendre en charge la renégociation sécurisée, faute de quoi les requêtes échoueront et vous recevrez une erreur semblable à :
Error: write EPROTO C0BAF076:error:0A000152:SSL routines:final_renegotiate:unsafe legacy renegotiation disabled:../deps/openssl/openssl/ssl/statem/extensions.c:922:
Compte tenu de ce changement lié à la sécurité, nous vous recommandons de vous assurer que tous les serveurs cibles sont mis à jour pour prendre en charge la renégociation sécurisée. Si les serveurs en question sont des serveurs tiers qui ne sont pas sous votre contrôle, vous pouvez envisager d’utiliser l’ancien comportement. Par exemple, pour la bibliothèque axios, l’extrait de code suivant montre comment utiliser l’ancien comportement :
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
      }
    )
  })