Créer des règles
Vous pouvez créer vos propres règles pour répondre à vos besoins particuliers en matière de fonctionnalités. Vous pouvez modifier un modèle de règle préexistant ou choisir de commencer à partir de zéro en utilisant l’un de nos exemples. Auth0 fournit un certain nombre de règles et de modèles de règles préexistants pour vous aider à atteindre votre ou vos objectif(s). Pour voir une liste, visitez notre Répertoire de règles sur GitHub.
Fonctionnement des règles
Les règles sont des fonctionnalités JavaScriptqui s’exécutent lorsqu’un utilisateur s’authentifie auprès de votre application. Elles sont exécutées une fois le processus d’authentification terminé, et vous pouvez les utiliser pour personnaliser et étendre les capacités d’Auth0. Pour des raisons de sécurité, le code de vos règles s’exécute dans un bac à sable, isolé du code des autres locataires Auth0. Les règles sont également exécutées pendant le flux d’actualisation des jetons. Pour en savoir plus, lisez Jetons d’actualisation
Dans Auth0, le flux de transactions d’authentification fonctionne comme suit lorsque vous utilisez des règles :

Une application lance une demande d’authentification auprès d’Auth0.
Auth0 transmet la demande à un fournisseur d’identité au moyen d’une connexion configurée.
L’utilisateur s’authentifie avec succès.
Le jeton d’ID et/ou d’accès passe par le pipeline de règles, puis est envoyé à l’application.
Conditions préalables
Si vous prévoyez d’utiliser des variables globales dans votre règle, veillez à configurer d’abord les variables de vos règles. Pour en savoir plus, consultez Configuration des variables globales pour les règles.
Utiliser le Dashboard
Accédez à Dashboard > Pipeline Auth > Règles et cliquez sur Créer.
Sélectionnez un modèle de règle.
Nommez la règle, modifiez le script en fonction de vos besoins et cliquez sur Enregistrer les modifications.
Utiliser Management API
Faites un appel POST
au point de terminaison Créer une règle. Assurez-vous de remplacer les valeurs fictives MGMT_API_ACCESS_TOKEN
, RULE_NAME
, RULE_SCRIPT
, RULE_ORDER
, and RULE_ENABLED
avec votre jeton d’accès au Management API, le nom de la règle, le script de la règle, le numéro d’ordre de la règle et la valeur activée de la règle, respectivement.
curl --request POST \
--url 'https://{yourDomain}/api/v2/rules' \
--header 'authorization: Bearer MGMT_API_ACCESS_TOKEN' \
--header 'cache-control: no-cache' \
--header 'content-type: application/json' \
--data '{ "name": "RULE_NAME", "script": "RULE_SCRIPT" }'
Was this helpful?
var client = new RestClient("https://{yourDomain}/api/v2/rules");
var request = new RestRequest(Method.POST);
request.AddHeader("content-type", "application/json");
request.AddHeader("authorization", "Bearer MGMT_API_ACCESS_TOKEN");
request.AddHeader("cache-control", "no-cache");
request.AddParameter("application/json", "{ \"name\": \"RULE_NAME\", \"script\": \"RULE_SCRIPT\" }", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
Was this helpful?
package main
import (
"fmt"
"strings"
"net/http"
"io/ioutil"
)
func main() {
url := "https://{yourDomain}/api/v2/rules"
payload := strings.NewReader("{ \"name\": \"RULE_NAME\", \"script\": \"RULE_SCRIPT\" }")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("content-type", "application/json")
req.Header.Add("authorization", "Bearer MGMT_API_ACCESS_TOKEN")
req.Header.Add("cache-control", "no-cache")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := ioutil.ReadAll(res.Body)
fmt.Println(res)
fmt.Println(string(body))
}
Was this helpful?
HttpResponse<String> response = Unirest.post("https://{yourDomain}/api/v2/rules")
.header("content-type", "application/json")
.header("authorization", "Bearer MGMT_API_ACCESS_TOKEN")
.header("cache-control", "no-cache")
.body("{ \"name\": \"RULE_NAME\", \"script\": \"RULE_SCRIPT\" }")
.asString();
Was this helpful?
var axios = require("axios").default;
var options = {
method: 'POST',
url: 'https://{yourDomain}/api/v2/rules',
headers: {
'content-type': 'application/json',
authorization: 'Bearer MGMT_API_ACCESS_TOKEN',
'cache-control': 'no-cache'
},
data: {name: 'RULE_NAME', script: 'RULE_SCRIPT'}
};
axios.request(options).then(function (response) {
console.log(response.data);
}).catch(function (error) {
console.error(error);
});
Was this helpful?
#import <Foundation/Foundation.h>
NSDictionary *headers = @{ @"content-type": @"application/json",
@"authorization": @"Bearer MGMT_API_ACCESS_TOKEN",
@"cache-control": @"no-cache" };
NSDictionary *parameters = @{ @"name": @"RULE_NAME",
@"script": @"RULE_SCRIPT" };
NSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://{yourDomain}/api/v2/rules"]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:10.0];
[request setHTTPMethod:@"POST"];
[request setAllHTTPHeaderFields:headers];
[request setHTTPBody:postData];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request
completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if (error) {
NSLog(@"%@", error);
} else {
NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response;
NSLog(@"%@", httpResponse);
}
}];
[dataTask resume];
Was this helpful?
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://{yourDomain}/api/v2/rules",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => "{ \"name\": \"RULE_NAME\", \"script\": \"RULE_SCRIPT\" }",
CURLOPT_HTTPHEADER => [
"authorization: Bearer MGMT_API_ACCESS_TOKEN",
"cache-control: no-cache",
"content-type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}
Was this helpful?
import http.client
conn = http.client.HTTPSConnection("")
payload = "{ \"name\": \"RULE_NAME\", \"script\": \"RULE_SCRIPT\" }"
headers = {
'content-type': "application/json",
'authorization': "Bearer MGMT_API_ACCESS_TOKEN",
'cache-control': "no-cache"
}
conn.request("POST", "/{yourDomain}/api/v2/rules", payload, headers)
res = conn.getresponse()
data = res.read()
print(data.decode("utf-8"))
Was this helpful?
require 'uri'
require 'net/http'
require 'openssl'
url = URI("https://{yourDomain}/api/v2/rules")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
request = Net::HTTP::Post.new(url)
request["content-type"] = 'application/json'
request["authorization"] = 'Bearer MGMT_API_ACCESS_TOKEN'
request["cache-control"] = 'no-cache'
request.body = "{ \"name\": \"RULE_NAME\", \"script\": \"RULE_SCRIPT\" }"
response = http.request(request)
puts response.read_body
Was this helpful?
import Foundation
let headers = [
"content-type": "application/json",
"authorization": "Bearer MGMT_API_ACCESS_TOKEN",
"cache-control": "no-cache"
]
let parameters = [
"name": "RULE_NAME",
"script": "RULE_SCRIPT"
] as [String : Any]
let postData = JSONSerialization.data(withJSONObject: parameters, options: [])
let request = NSMutableURLRequest(url: NSURL(string: "https://{yourDomain}/api/v2/rules")! as URL,
cachePolicy: .useProtocolCachePolicy,
timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data
let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
if (error != nil) {
print(error)
} else {
let httpResponse = response as? HTTPURLResponse
print(httpResponse)
}
})
dataTask.resume()
Was this helpful?
Valeur | Description |
---|---|
MGMT_API_ACCESS_TOKEN |
Jeton d’accès à Management API avec la permission create:rules . |
RULE_NAME |
Nom de la règle que vous souhaitez créer. Le nom de la règle ne peut contenir que des caractères alphanumériques, des espaces et des traits d’union; il ne peut pas commencer ou se terminer par des espaces ou des traits d’union. |
RULE_SCRIPT |
Script contenant le code de la règle. Il doit correspondre à ce que vous entreriez si vous créiez une nouvelle règle à l’aide du Dashboard. |
RULE_ORDER (facultatif) |
Entier qui représente l’ordre dans lequel la règle doit être exécutée par rapport à d’autres règles. Les règles dont le numéro est inférieur sont exécutées avant les règles dont le numéro est supérieur. Si aucun numéro d’ordre n’est fourni, la règle sera exécutée en dernier. |
RULE_ENABLED (facultatif) |
Valeur booléenne qui représente si la règle est activée (true ) ou désactivée (false ). |
Gestion des limites anti-attaques
Pour les règles qui font appel aux API Auth0, vous devez toujours gérer la limite anti-attaques en vérifiant l’en-tête X-RateLimit-Remaining
et en agissant de manière appropriée lorsque le nombre renvoyé se rapproche de 0. Vous devez également ajouter une logique pour gérer les cas où vous dépassez les limites anti-attaques fournies et recevez le code d’état HTTP 429 (trop de demandes); dans ce cas, si une nouvelle tentative est nécessaire, il est préférable de prévoir un délai pour éviter d’entrer dans une boucle infinie de tentatives. Pour en savoir plus sur les limites anti-attaques, consultez la Politique de limites anti-attaques pour les API Auth0.
Modules proposés
Les règles s’exécutent dans un bac à sable JavaScript configuré pour une version spécifique de Node.js.
Le bac à sable prend en charge toutes les versions du langage JavaScript (et la syntaxe associée) pour la version spécifiée de Node.js, ainsi qu’un grand nombre de modules Node.js. Pour une liste des modules de bac à sable pris en charge, consultez Puis-je exiger : extensibilité Auth0.