Migrez vers un point de terminaison sans mot de passe à partir d’applications confidentielles
Auth0 déconseille l’utilisation du point de terminaison /passwordless/start
à partir d’applications confidentielles lorsque Auth0 n’est pas en mesure d’authentifier que l’appel est effectué au nom de l’application.
Auth0 utilise le terme « confidentiel » pour les applications qui peuvent stocker des secrets. Dans Auth0, il s’agit « d’applications Web classiques », qui diffusent des pages Web à partir d’une application dorsale. Les applications à page unique et les applications natives, quant à elles, sont considérées comme des applications « publiques » et ne sont pas concernées par ce changement.
Auth0 peut authentifier les appels à /passwordless/start
lorsqu’ils incluent un client_secret
en tant que paramètre, ou lorsque les appels sont effectués à partir de la page de connexion personnalisée dans la connexion universelle et transmettent le paramètre state
.
Caractéristiques affectées
Si l’une de vos applications appelle actuellement le point de terminaison /passwordless/start
directement pour initier l’authentification sans mot de passe à partir d’une application Web, sans envoyer le client_secret
en tant que paramètre, cette obsolescence vous affectera.
Si vous implémentez l’authentification sans mot de passe à partir de la page de connexion universelle et avez modifié le mode d’initialisation par défaut des bibliothèques Auth0, vous pourriez également être touché.
Vous pouvez vérifier si vous êtes touché en consultant les journaux des locataires, en filtrant par « Avis d’abandon » et en recherchant les journaux indiquant « Appliquer l’authentification client pour les connexions sans mot de passe ». Vous pouvez également effectuer cette recherche directement en utilisant la requête suivante : type:depnote AND description:*passwordless*
. Veuillez noter que cette requête particulière ne sera applicable qu’aux locataires du nuage public, car les journaux du nuage privé ne permettent pas de recherche dans le champ de description.
Actions
Si vous appelez le point de terminaison /passwordless/start
, sans authentification d’application appropriée, vous devez :
Suivre les instructions décrites ci-dessous pour ajuster le code afin d’appeler correctement le point de terminaison
/passwordless/start
.Vérifiez vos journaux des locataires afin de vous assurer que la modification a été correctement effectuée et qu’aucun journal d’obsolescence n’est généré pour « Appliquer l’authentification client pour les connexions sans mot de passe ».
Dans la section Migrations de Paramètres avancés du locataire, activez le bouton bascule Appliquer l’authentification client pour les connexions sans mot de passe.
Il existe quelques cas d’utilisation qui pourraient être touchés, mais pour chacun d’eux, le chemin de migration est assez simple :
Appels API depuis le système dorsal
Pour tous les appels de votre système dorsal vers le point de terminaison /passwordless/start
, votre appel doit inclure le secret client comme paramètre.
Si vous faites une requête POST directement à /passwordless/start
, vous devez inclure le client_secret
dans le cadre de la charge utile :
POST https://{yourDomain}/passwordless/start
Content-Type: application/json
{
"client_id": "{yourClientId}",
"client_secret": "{yourClientSecret}",
"connection": "email|sms",
"email": "{userEmailAddress}", //set for connection=email
"phone_number": "{userPhoneNumber}", //set for connection=sms
"send": "link|code",
"authParams": {
"scope": "openid",
"state": "{yourState}"
}
}
Was this helpful?
Si vous utilisez une trousse SDK, ajoutez le paramètre à la méthode qui lance le flux sans mot de passe. Cela varie selon chaque trousse SDK, et toutes n’ont pas encore été mises à jour. Si vous utilisez une trousse SDK qui n’a pas encore été mise à jour, vous pouvez effectuer l’appel HTTP directement en attendant que cette mise à jour soit réalisée.
Auth0.js ou Lock.js dans la page de connexion universelle
Pour ce qui est de l’authentification sans mot de passe dans une application Web à partir de la page de connexion universelle, celle-ci effectuera des appels au point de terminaison /passwordless/start
en utilisant Lock.js ou Auth0.js.
Étant donné qu’il n’est pas possible de stocker un secret client dans une page Web, la méthode d’authentification de l’appel consiste à transmettre le paramètre state
reçu sur la page de connexion universelle au point de terminaison /passwordless/start
. Ce paramètre est stocké dans le champ config.internalOptions
dans la page de connexion personnalisée.
Les modèles par défaut pour la personnalisation de la page de connexion l’utilisent de la manière suivante lors de l’initialisation de Lock.js ou Auth0.js :
var lock = new Auth0Lock(
config.clientID,
config.auth0Domain,
{
auth: {
// .. other fields set
params: {
scope: config.internalOptions.scope,
_csrf: config.internalOptions._csrf,
state: config.internalOptions.state,
}
}
});
Was this helpful?
var params = Object.assign({
scope: config.internalOptions.scope,
_csrf: config.internalOptions._csrf,
state: config.internalOptions.state,
}, {
// ...auth params
});
var webAuth = new auth0.WebAuth(params);
Was this helpful?
Veuillez vérifier dans la mise en œuvre de votre page personnalisée que vous n’avez pas supprimé ce code.
Appeler /passwordless/start depuis le client dans une application Web
Si vous appelez le point de terminaison /passwordless/start
à partir d’une page utilisant JavaScript (p. ex., en utilisant Auth0.js sur la page) à partir d’applications Web classiques, vous ne pourrez pas préciser un secret client dans un appel effectué en utilisant JavaScript. Si tel est le cas pour votre application, vous devrez modifier vos applications afin que /passwordless/start
soit appelé depuis le système dorsal de votre application Web, plutôt que du côté client.
Limites anti-attaques
Une conséquence de l’ajout de l’authentification client au point de terminaison /passwordless/start
est qu’Auth0 peut désormais faire confiance aux en-têtes envoyés avec la requête. Si vous définissez l’en-tête auth0-forwarded-for
, l’adresse IP figurera dans les journaux et sera utilisée à des fins de protection contre les attaques.
Les requêtes authentifiées vers /passwordless/start
seront considérées comme des requêtes API authentifiées classiques, et la limite anti-attaque globale de l’Authentication API correspondante s’appliquera.