Éviter les problèmes courants liés au flux de mot de passe du propriétaire de ressource et à la protection contre les attaques
Bien que nous ne le recommandons pas, les applications hautement fiables peuvent utiliser le Flux de mot de passe du propriétaire de ressource, (parfois appelé consentement de mot de passe au propriétaire de la ressource ou ROPG), qui demande aux utilisateurs de fournir des informations d’identification (nom d’utilisateur et mot de passe), généralement à l’aide d’un formulaire interactif. Si la protection contre la force brute est activée, lorsque Auth0 valide les informations d’identification, nous pouvons également vérifier les attaques et effectuer les actions appropriées si une attaque est détectée.
Malheureusement, lorsque vous utilisez ce flux avec une protection contre les attaques de force brute, certaines fonctionnalités de protection contre les attaques peuvent échouer. Certains problèmes courants peuvent toutefois être évités.
Protection contre les attaques et API côté serveur
La protection contre la force brute et la limitation des adresses IP suspectes reposent sur la connaissance de l’adresse IP de l’utilisateur. Lors de l’appel d’une API depuis votre serveur, Auth0 traite l’adresse IP de votre serveur comme adresse IP de l’utilisateur et la fournit en entrée pour la protection contre la force brute et la fonctionnalité de filtrage des IP suspectes. Cela pourrait potentiellement déclencher de faux positifs, obligeant la protection contre les attaques à bloquer les utilisateurs ou à déclencher des avertissements pour des demandes légitimes.
Pour éviter cela, envoyez l’adresse IP de l’utilisateur à Auth0 avec ses informations d’identification et configurez votre application pour qu’elle approuve l’adresse IP.
Configurer votre application pour faire confiance à l’adresse IP
Enregistrez soit une application Web standard, soit une application de communication entre machines. Lors de la configuration de l’application :
Sous Identifiants, sélectionnez une méthode d'authentification autre que
None
.Sous Advanced Settings (Paramètres avancés), recherchez l’onglet Oauth et activez Faire confiance à l'IP indiqué dans l'entête du point de terminaison du jeton, qui définira l’en-tête
auth0-forwarded-for
comme source fiable de l’adresse IP de l’utilisateur pour la protection contre la force brute. Ce paramètre ne sera pas disponible pour les applications non authentifiées.
Envoyer l’adresse IP de l’utilisateur depuis votre serveur
Lorsque vous demandez des jetons à l’aide du flux de mot de passe du propriétaire de ressource, incluez un en-tête
auth0-forwarded-for
qui contient la valeur de l’adresse IP de l’utilisateur. Assurez-vous que l’adresse IP que vous fournissez appartient réellement à votre utilisateur.Spécifiez les listes blanches d’adresses IP à ignorer lors du déclenchement de la protection contre la force brute et de la limitation d’adresses IP suspectes.
Autoriser l’énumération avec une protection contre les attaques exhaustives et la limitation pour les adresses IP suspicieuses
Si votre application authentifiée est configurée pour envoyer l’en-tête auth0-forwarded-for
:
Seule l’adresse IP contenue dans l’en-tête
auth0-forwarded-for
est vérifiée par la protection contre les attaques exhaustives et les listes blanches (AllowLists) de limitation pour les adresses IP suspectes.L’adresse IP du proxy est ignorée par la protection contre les attaques exhaustives et la limitation pour les adresses IP suspicieuses, et il n’est donc pas nécessaire de l’ajouter aux listes blanches (AllowLists)
Pour les clients spécifiques qui utilisent le proxy et qui ne devraient pas être sujets à la protection contre les attaques exhaustives et la limitation pour les adresses IP suspicieuses, ajoutez-les aux AllowLists.
L’en-tête auth0-forwarded-for
sera uniquement acceptée pour les appels authentifiés avec le secret client. Si votre application n’est pas authentifiée ou qu’elle n’est pas configurée pour envoyer l’entête auth0-forwarded-for
:
l’adresse IP d’origine de chaque requête est vérifiée par la protection contre les attaques exhaustives et les listes blanches (AllowLists) de limitation pour les adresses IP suspicieuses.
Si vous ajoutez l’IP d’un proxy à l’AllowList, tout le traffic qui passe par le proxy sera exempt de la protection contre les attaques exhaustives et la limitation pour les adresses IP suspicieuses. Ce n’est probablement pas ce que vous voulez.
Exemple
var request = require("request");
app.post('/api/auth', function(req, res, next) {
var options = {
method: 'POST',
url: 'https://{yourDomain}/oauth/token',
headers: {
'content-type': 'application/x-www-form-urlencoded',
'auth0-forwarded-for': req.ip // End user ip
},
form: {
grant_type: 'password',
username: 'USERNAME',
password: 'PASSWORD',
audience: 'YOUR_API_IDENTIFIER',
scope: 'SCOPE',
client_id: '{yourClientId}',
client_secret: 'YOUR_CLIENT_SECRET' // Client is authenticated
}
};
request(options, function (error, response, body) {
if (error) return next(error);
// ...
});
});
Was this helpful?
Réponses de détection de violation de mot de passe
Si vous avez activé Détection de mot de passe violé pour votre locataire, vous devez configurer votre application pour gérer les réponses de l’Authentication API Auth0 en conséquence.
Par exemple, si vous envoyez un mot de passe à l’aide du flux ROP et qu’Auth0 détecte qu’il a été compromis, l’Authentication API renvoie une réponse avec le code d’état HTTP 401 Unauthorized
et le texte suivant :
{
"error": "password_leaked",
"error_description": "This login attempt has been blocked because the password you're using was previously disclosed through a data breach (not in this application). Please check your email for more information."
}
Was this helpful?
Votre application doit gérer cette erreur, afficher un message à l’utilisateur et déclencher un flux de réinitialisation de mot de passe interactif.
Valider avec les journaux
Si vos paramètres fonctionnent correctement, vous verrez ce qui suit dans les journaux :
type: sepft
...
ip: <ip from auth0-forwarded-for header>
client_ip: <ip of actual client/proxy>
...
Was this helpful?