Création de hooks

Vous pouvez créer plusieurs hooks à l’aide de Dashboard et Management API.

Vous pouvez également importer et exporter des hooks à l’aide de l’outil Deploy CLI.

Utiliser Dashboard

  1. Allez à Tableau de bord Auth0 > Pipeline Auth > Crochets, et cliquez sur +Créer.

  2. Saisissez un nom descriptif pour votre hook, sélectionnez le point d’extensibilité pour lequel le hook doit s’exécuter, et cliquez sur Créer.

  3. Localisez la section correspondant au point d’extensibilité que vous avez sélectionné et cliquez sur l’icône en forme de crayon à côté du hook que vous avez créé.

  4. Mettez à jour le hook à l’aide du Éditeur de hooks et cliquez sur l’icône de disquette pour l’enregistrer.

Utiliser Management API

Effectuez un appel POST au point de terminaison Créer un point de terminaison de hook. Veillez à remplacer les paramètres fictifs MGMT_API_ACCESS_TOKEN, HOOK_NAME, HOOK_SCRIPT et EXTENSIBILITY_POINT_NAME par votre jeton d’accès à Management API, le nom de l’appel, le script du hook et le nom du point d’extensibilité, respectivement.


curl --request POST \
  --url 'https://{yourDomain}/api/v2/hooks' \
  --header 'authorization: Bearer MGMT_API_ACCESS_TOKEN' \
  --header 'cache-control: no-cache' \
  --header 'content-type: application/json' \
  --data '{ "name": "HOOK_NAME", "script": "HOOK_SCRIPT", "triggerId": "EXTENSIBILITY_POINT_NAME" }'

Was this helpful?

/
var client = new RestClient("https://{yourDomain}/api/v2/hooks");
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\": \"HOOK_NAME\", \"script\": \"HOOK_SCRIPT\", \"triggerId\": \"EXTENSIBILITY_POINT_NAME\" }", 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/hooks"

	payload := strings.NewReader("{ \"name\": \"HOOK_NAME\", \"script\": \"HOOK_SCRIPT\", \"triggerId\": \"EXTENSIBILITY_POINT_NAME\" }")

	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/hooks")
  .header("content-type", "application/json")
  .header("authorization", "Bearer MGMT_API_ACCESS_TOKEN")
  .header("cache-control", "no-cache")
  .body("{ \"name\": \"HOOK_NAME\", \"script\": \"HOOK_SCRIPT\", \"triggerId\": \"EXTENSIBILITY_POINT_NAME\" }")
  .asString();

Was this helpful?

/
var axios = require("axios").default;

var options = {
  method: 'POST',
  url: 'https://{yourDomain}/api/v2/hooks',
  headers: {
    'content-type': 'application/json',
    authorization: 'Bearer MGMT_API_ACCESS_TOKEN',
    'cache-control': 'no-cache'
  },
  data: {
    name: 'HOOK_NAME',
    script: 'HOOK_SCRIPT',
    triggerId: 'EXTENSIBILITY_POINT_NAME'
  }
};

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": @"HOOK_NAME",
                              @"script": @"HOOK_SCRIPT",
                              @"triggerId": @"EXTENSIBILITY_POINT_NAME" };

NSData *postData = [NSJSONSerialization dataWithJSONObject:parameters options:0 error:nil];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"https://{yourDomain}/api/v2/hooks"]
                                                       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/hooks",
  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\": \"HOOK_NAME\", \"script\": \"HOOK_SCRIPT\", \"triggerId\": \"EXTENSIBILITY_POINT_NAME\" }",
  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\": \"HOOK_NAME\", \"script\": \"HOOK_SCRIPT\", \"triggerId\": \"EXTENSIBILITY_POINT_NAME\" }"

headers = {
    'content-type': "application/json",
    'authorization': "Bearer MGMT_API_ACCESS_TOKEN",
    'cache-control': "no-cache"
    }

conn.request("POST", "/{yourDomain}/api/v2/hooks", 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/hooks")

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\": \"HOOK_NAME\", \"script\": \"HOOK_SCRIPT\", \"triggerId\": \"EXTENSIBILITY_POINT_NAME\" }"

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": "HOOK_NAME",
  "script": "HOOK_SCRIPT",
  "triggerId": "EXTENSIBILITY_POINT_NAME"
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://{yourDomain}/api/v2/hooks")! 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:hooks. Pour en savoir plus, lisez Jeton d’accès à Management API.
HOOK_NAME Nom de l’appel à créer.
HOOK_SCRIPT Script contenant le code de l’appel. Doit correspondre à ce que vous entreriez si vous créiez un nouvel appel en utilisant le Dashboard.
EXTENSIBILITY_POINT_NAME Nom du point d’extensibilité pour lequel l’appel doit s’exécuter. Options à inclure : credentials-exchange, pre-user-registration, post-user-registration, post-change-password. Pour en savoir plus sur les points d’extensibilité, lisez Points d’extensibilité.

Gérer les limitations de taux lors d’une requête API depuis un Hook

Si vous faites une requête API Auth0 à partir d’un script de Hook, vous devrez gérer les limitations de taux. Pour ce faire, vérifiez l’en-tête X-RateLimit-Remaining et gérez la situation de manière adéquate lorsque le numéro retourné s’approche de 0.

De plus, ajoutez le code nécessaire pour gérer les cas dans lesquels vous dépassez les limites de taux et recevez un code de statut HTTP 429(Too Many Requests). Dans ce cas, si une nouvelle requête est nécessaire, il est recommandé de prévoir un délai d’attente pour éviter de se retrouver dans une boucle infinie de tentatives.

Pour en savoir plus sur la limite anti-attaques d’Auth0 pour les hooks, lisez Limites anti-attaques.

En savoir plus