Le plugin d’authentification WordPress REST API fournit la sécurité contre tout accès non autorisé à vos API WordPress REST.
Résultats de recherche :
×OAuth 2.0 est la méthode la plus utilisée pour authentifier l’accès aux API. OAuth 2.0 permet l'autorisation sans qu'il soit nécessaire de fournir l'adresse e-mail ou le mot de passe de l'utilisateur à une application externe. Cette méthode d'authentification OAuth 2.0 de l'API REST WordPress implique l'utilisation du flux de protocole OAuth 2.0 pour obtenir le jeton d'accès de sécurité ou le jeton d'identification (jeton JWT) et ce jeton sera utilisé pour authentifier les points de terminaison de l'API REST WordPress. Chaque fois qu'une demande d'accès au point de terminaison de l'API REST WordPress sera effectuée, l'authentification sera effectuée par rapport à ce jeton d'accès/jeton d'identification (jeton JWT), et sur la base de la vérification de ce jeton API Bearer, les ressources de cette API la demande sera autorisée à accéder.
Le jeton fourni à l'aide de la méthode d'authentification OAuth 2.0 est hautement crypté et sécurisé, la sécurité n'est donc pas compromise. Il s’agit de la méthode la plus sécurisée pour authentifier/protéger les points de terminaison de l’API WordPress REST. Cette méthode est quelque peu similaire à la méthode d'authentification JWT mais beaucoup plus sécurisée en raison des divers avantages du protocole OAuth 2.0.
Le plugin d’authentification WordPress REST API fournit la sécurité contre tout accès non autorisé à vos API WordPress REST.
Cas d'utilisation : Enregistrez un utilisateur WordPress ou authentifiez/connectez les utilisateurs sur des plates-formes externes en fonction des informations d'identification WordPress via l'API REST de WordPress.
Supposons que vous ayez un formulaire de connexion dans votre application et que vous souhaitiez authentifier l'utilisateur sur la base de ses informations de connexion WordPress, alors l'authentification OAuth 2.0 dans la méthode API REST vous aidera à y parvenir. Le plugin fournit une API de connexion WordPress. Vous pouvez facilement transmettre les informations d'identification WordPress de cet utilisateur à cette API et, sur la base de la validation, vous recevrez l'authentification et la réponse.
En outre, la méthode d'implémentation de l'authentification OAuth 2.0 dans l'API REST peut également être utilisée pour enregistrer des utilisateurs dans WordPress à l'aide des informations d'identification d'administrateur de l'utilisateur WordPress. À l'aide du point de terminaison du jeton OAuth 2.0 du plugin, vous pouvez transmettre les informations d'identification de l'utilisateur WordPress qui ont des capacités d'administrateur telles que le jeton généré aura des capacités d'administrateur pouvant être utilisées pour effectuer des opérations telles que l'enregistrement des utilisateurs pour lesquelles des privilèges administratifs sont requis. Une fois que vous avez le jeton, vous pouvez utiliser ce jeton avec l'API WordPress '/users' pour enregistrer des utilisateurs dans WordPress via une requête API REST.
Cas d'utilisation : authentifiez/protégez les points de terminaison de l'API REST WordPress en toute sécurité ou enregistrez les utilisateurs dans WordPress sans utiliser les informations d'identification de l'utilisateur administrateur.
Si vous souhaitez accéder à l'API REST de WordPress sans transmettre les informations d'identification de l'utilisateur WordPress ou si vous souhaitez enregistrer les utilisateurs dans WordPress en toute sécurité sans avoir besoin de transmettre les informations d'identification de l'utilisateur administrateur de WordPress et de transmettre à la place les informations d'identification du client fournies par le plugin, cette méthode est la solution parfaite afin qu'il n'y ait aucune chance que les informations d'identification des utilisateurs soient compromises.
Le plugin agit à la fois comme un fournisseur d'identité (serveur) OAuth 2.0 qui fournit le jeton et l'authentificateur des API REST pour l'authentification de ces points de terminaison de l'API REST WordPress sur la base du jeton. Par conséquent, il offre une sécurité maximale pour obtenir le jeton et ce jeton peut être utilisé pour authentifier la requête API REST.
1. La requête API REST sera effectuée avec les paramètres appropriés pour obtenir le token de notre plugin. Notre plugin agira en tant que fournisseur d'identité OAuth 2.0 et fournira le jeton d'accès.
2. La demande réelle de l'API REST pour accéder à la ressource sera effectuée avec le jeton d'accès reçu lors de la dernière étape passée dans l'en-tête Autorisation avec le type de jeton comme Bearer. Le plugin agit désormais comme authentificateur pour authentifier l'API sur la base de la validité du jeton. Si le jeton est validé avec succès, le demandeur de l'API sera autorisé à accéder à la ressource. Sinon, en cas d'échec de la validation, la réponse d'erreur sera renvoyée.
Cas d'utilisation associé :
La partie configuration du plugin a maintenant été effectuée avec succès. Vous trouverez ci-dessous la partie dans laquelle le jeton d'accès de sécurité/JWT réel sera obtenu et utilisé davantage pour accéder aux API REST de WordPress.
Request: POST https://<domain-name>/wp-json/api/v1/token
Body:
grant_type =<password>
username =<wordpress username>
password = <wordpress password>
client_id =<client id>
Sample curl Request Format-
curl -d "grant_type=password&username=<wordpress_username>&password=<wordpress_password>&client_id=<client_id>"
-X POST http://<wp_base_url>/wp-json/api/v1/token
Request: POST https://<domain-name>/wp-json/api/v1/token
Body:
grant_type = <refresh_token>
refresh_token = <Refresh Token>
Sample curl Request Format-
curl -d "grant_type=refresh_token&refresh_token=<refresh_token>&client_id=<client_id>&client_secret=<client_secret>"
-X POST http://<wp_base_url>/wp-json/api/v1/token
Request: GET https://<domain-name>/wp-json/wp/v2/posts
Header: Authorization :Bearer <access_token /id_token>
Request: POST https://<domain-name>/wp-json/api/v1/token
Body:
grant_type = <client_credentials>
client_id = <client id>
client_secret = <client secret>
Sample curl Request Format-
curl -d "grant_type=client_credentials&client_id=<client_id>&client_secret=<client_secret>"
-X POST http://<wp_base_url>/wp-json/api/v1/token
Request: POST https://<domain-name>/wp-json/api/v1/token
Body:
grant_type = <refresh_token>
refresh_token = <Refresh Token>
Sample curl Request Format-
curl -d "grant_type=refresh_token&refresh_token=<refresh_token>&client_id=<client_id>&client_secret=<client_secret>"
-X POST http://<wp_base_url>/wp-json/api/v1/token
Request: GET https://<domain-name>/wp-json/wp/v2/posts
Header: Authorization : Bearer <access_token /id_token>
1. Actualiser le jeton -
Vous pouvez activer cette option si vous souhaitez recevoir une chaîne qui est également un jeton d'actualisation ainsi qu'un jeton d'accès ou un jeton JWT dans la demande de point de terminaison du jeton. Cela permettra à l'utilisateur d'accéder aux mêmes ressources que celles qui lui ont été accordées précédemment. Une fois le nouveau jeton créé, l'utilisateur ne devrait pas avoir accès au-delà de l'autorisation d'origine. Les jetons d'actualisation permettent aux serveurs d'autorisation d'utiliser de courtes périodes (durée de vie) pour les jetons d'accès sans avoir besoin d'impliquer l'utilisateur lors de l'expiration du jeton. Avec ce jeton, vous pouvez régénérer le jeton d'accès/jeton JWT car ils sont censés expirer sous peu pour augmenter la sécurité.
2. Révoquer le jeton -
L'activation de cette option vous permet de révoquer le jeton d'accès/JWT existant pour le rendre invalide et, par conséquent, le jeton particulier ne peut pas être utilisé pour authentifier les API WP REST. L'API RESTful valide d'abord les informations d'identification de l'application et si le jeton a été émis à l'application effectuant la demande de révocation. Si la validation échoue, la demande particulière est refusée et une erreur s'affiche dans l'application. L'API invalide le jeton et celui-ci ne peut plus être utilisé après sa révocation. Chaque demande de révocation invalide les jetons émis pour le même type d'octroi d'autorisation.
var client = new RestClient("http://<wp_base_url>/wp-json/api/v1/token ");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AlwaysMultipartFormDatatrue;
request.AddParameter("grant_type", "client_credentials");
request.AddParameter("client_id", "<client_id>");
request.AddParameter("client_secret", "<client_secret>");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("grant_type", "client_credentials");
.addFormDataPart("client_id", "<client_id>");
.addFormDataPart("client_secret", "<client_secret>");
.build();
Request request = new Request.Builder()
.url("http://<wp_base_url>/wp-json/api/v1/token ")
.method("POST", null)
.build();
Response responseclient.newCall(request).execute();
var form = new FormData();
form.append("grant_type", "client_credentials");
form.append("client_id", "<client_id>");
form.append("client_secret", "<client_secret>");
var settings = {
"url": "http://<wp_base_url>/wp-json/api/v1/token ",
"method": "POST",
"timeout": 0,
"processData": false,
"mimeType": "multipart/form-data",
"contentType": false,
"data": form
};
$.ajax(settings).done(function (response) {
console.log(response);
});
<?php
$curl = curl_init();
curl_setopt_array($curl, array
(
CURLOPT_URL => 'http://%3Cwp_base_url%3E/wp-json/api/v1/token',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('grant_type' => 'client_credentials','client_id' => '<client_id>','client_secret' => '<client_secret>'),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
from codecs import encode
conn = http.client.HTTPSConnection("<wp_base_url>")
dataList= []
boundary = 'wL36Yn8afVp8Ag7AmP8qZ0SA4n1v9T'
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=grant_type;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("client_credentials"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=client_id;'))
dataList.append('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<client_id>"))
dataList.append(encode('--'+ boundary))
dataList.append(encode('Content-Disposition: form-data; name=client_secret;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<client_secret<"))
dataList.append(encode('--'+boundary+'--'))
dataList.append(encode(''))
body = b'\r\n'.join(dataList)
payload= body
headers = {
'Content-type': 'multipart/form-data; boundary={}'.format(boundary)
}
conn.request("POST", "/wp-json/api/v1/token ", payload, headers)
res= conn.getresponse()
data = res.read()
print (data.decode("utf-8"))
var client = new RestClient("http://<wp_base_url>/wp-json/api/v1/token ");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AlwaysMultipartFormData true;
request.AddParameter("grant_type", "password");
request.AddParameter("username", "<wordpress_username>");
request.AddParameter("password", "<wordpress_password>");
request.AddParameter("client_id", "<client_id>");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("grant_type", "password");
.addFormDataPart("username", "<wordpress_username>");
.addFormDataPart("password", "<wordpress_password>");
.addFormDataPart("client_id", "<client_id>");
.build();
Request request = new Request.Builder()
.url("http://<wp_base_url>/wp-json/api/v1/token ")
.method("POST", null)
.build();
Response responseclient.newCall(request).execute();
var form = new FormData();
form.append("grant_type", "password");
form.append("username", "<wordpress_username>");
form.append("password", "<wordpress_password>");
form.append("client_id", "<client_id>");
var settings = {
"url": "http://<wp_base_url>/wp-json/api/v1/token ",
"method": "POST",
"timeout": 0,
"processData": false,
"mimeType": "multipart/form-data",
"contentType": false,
"data": form
};
$.ajax(settings).done(function (response) {
console.log(response);
});
<?php
$curl = curl_init();
curl_setopt_array($curl, array
( CURLOPT_URL => 'http://%3Cwp_base_url%3E/wp-json/api/v1/token%20',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('username' => '<wordpress_username>','password' => '<wordpress_password>'),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
from codecs import encode
conn = http.client.HTTPSConnection("<wp_base_url>")
dataList= []
boundary = 'wL36Yn8afVp8Ag7AmP8qZ0SA4n1v9T'
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=grant_type;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("password"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=username;')
dataList.append('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<wordpress_username>"))
dataList.append(encode('--'+ boundary))
dataList.append(encode('Content-Disposition: form-data; name=password;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<wordpress_password<"))
dataList.append(encode('--'+boundary))
dataList.append(encode('Content-Disposition: form-data; name=client_id;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<client_id>"))
dataList.append(encode('--'+boundary+'--'))
dataList.append(encode(''))
body = b'\r\n'.join(dataList)
payload= body
headers = {
'Content-type': 'multipart/form-data; boundary={}'.format(boundary)
}
conn.request("POST", "/wp-json/api/v1/token ", payload, headers)
res= conn.getresponse()
data = res.read()
print (data.decode("utf-8"))
var client = new RestClient("http://<wp_base_url>/wp-json/api/v1/token ");
client.Timeout = -1;
var request = new RestRequest(Method.POST);
request.AlwaysMultipartFormDatatrue;
request.AddParameter("grant_type", "refresh_token");
request.AddParameter("client_id", "<client_id>");
request.AddParameter("client_secret", "<client_secret>");
request.AddParameter("refresh_token", "<refresh_token>");
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("grant_type", "refresh_token");
.addFormDataPart("client_id", "<client_id>");
.addFormDataPart("client_secret", "<client_secret>");
.addFormDataPart("refresh_token", "<refresh_token>");
.build();
Request request = new Request.Builder()
.url("http://<wp_base_url>/wp-json/api/v1/token ")
.method("POST", null)
.build();
Response responseclient.newCall(request).execute();
var form = new FormData();
form.append("grant_type", "refresh_token");
form.append("client_id", "<client_id>");
form.append("client_secret", "<client_secret>");
form.append("refresh_token", "<refresh_token>");
var settings = {
"url": "http://<wp_base_url>/wp-json/api/v1/token ",
"method": "POST",
"timeout": 0,
"processData": false,
"mimeType": "multipart/form-data",
"contentType": false,
"data": form
};
$.ajax(settings).done(function (response) {
console.log(response);
});
<?php
$curl = curl_init();
curl_setopt_array($curl, array
(
CURLOPT_URL => 'http://%3Cwp_base_url%3E/wp-json/api/v1/token',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => array('grant_type' => 'refresh_token','client_id' => '<client_id>','client_secret' => '<client_secret>','refresh_token' => '<refresh_token>'),
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
import mimetypes
from codecs import encode
conn = http.client.HTTPSConnection("<wp_base_url>")
dataList= []
boundary = 'wL36Yn8afVp8Ag7AmP8qZ0SA4n1v9T'
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=grant_type;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("refresh_token"))
dataList.append(encode('--' + boundary))
dataList.append(encode('Content-Disposition: form-data; name=client_id;'))
dataList.append('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<client_id>"))
dataList.append(encode('--'+ boundary))
dataList.append(encode('Content-Disposition: form-data; name=client_secret;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<client_id>"))
dataList.append(encode('--'+ boundary))
dataList.append(encode('Content-Disposition: form-data; name=refresh_token;'))
dataList.append(encode('Content-Type: {}'.format('text/plain')))
dataList.append(encode(''))
dataList.append(encode("<refresh_token<"))
dataList.append(encode('--'+boundary+'--'))
dataList.append(encode(''))
body = b'\r\n'.join(dataList)
payload= body
headers = {
'Content-type': 'multipart/form-data; boundary={}'.format(boundary)
}
conn.request("POST", "/wp-json/api/v1/token ", payload, headers)
res= conn.getresponse()
data = res.read()
print (data.decode("utf-8"))
var client = new RestClient("http://<wp_base_url>/wp-json/wp/v2/posts");
client.Timeout = -1;
var request = new RestRequest(Method.GET);
request.AddHeader = ("Authorization", "Bearer < access_token / id_token >")
IRestResponse response = client.Execute(request);
Console.WriteLine(response.Content);
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("text/plain");
RequestBody body = RequestBody.create(mediaType, "");
Request request = new Request.Builder()
.url("http://<wp_base_url>//wp-json/wp/v2/posts ")
.method("GET", body)
.addHeader = ("Authorization", "Bearer < access_token / id_token >")
.build();
Response responseclient.newCall(request).execute();
var settings = {
"url": "http://<wp_base_url>/wp-json/wp/v2/posts ",
"method": "GET",
"timeout": 0,
"headers": {
"Authorization": "Bearer < access_token / id_token >"
},
};
$.ajax(settings).done(function (response) {
console.log(response);
});
<?php
$curl = curl_init();
curl_setopt_array($curl, array
(
curl_setopt_array($curl, array(
CURLOPT_URL => 'http://%3Cwp_base_url%3E/wp-json/wp/v2/posts%20',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer < access_token / id_token >'
);
));
$response = curl_exec($curl);
curl_close($curl);
echo $response;
import http.client
conn = http.client.HTTPSConnection("<wp_base_url>")
payload = "
headers = {
'Authorization': 'Bearer < access_token / id_token >'
}
conn.request("GET", "/wp-json/wp/v2/posts ", payload, headers)
res= conn.getresponse()
data = res.read()
print (data.decode("utf-8"))
a) Méthode d'attribution de mot de passe OAuth 2.0 :
b) Méthode d'attribution des informations d'identification client OAuth 2.0 :
c) Requête API REST pour obtenir la ressource réelle :
Cette fonctionnalité permet de restreindre l'accès à l'API REST en fonction des rôles des utilisateurs. Vous pouvez ajouter sur liste blanche les rôles pour lesquels vous souhaitez autoriser l'accès à la ressource demandée pour les API REST. Ainsi, chaque fois qu'une requête API REST est effectuée par un utilisateur, son rôle sera récupéré et autorisé à accéder à la ressource uniquement si son rôle est sur liste blanche.
Comment le configurer ?
Remarque: La fonctionnalité de restriction basée sur les rôles est valide pour l'authentification de base (nom d'utilisateur : mot de passe), la méthode JWT et OAuth 2.0 (octroi de mot de passe).
Cette fonctionnalité offre la possibilité de choisir un en-tête personnalisé plutôt que l'en-tête « Autorisation » par défaut.
Cela augmentera la sécurité car l'en-tête est nommé avec votre « nom personnalisé », donc si quelqu'un fait la demande d'API REST avec un en-tête comme « Autorisation », il ne pourra pas accéder aux API.
Comment le configurer ?
Cette fonctionnalité vous permet de mettre en liste blanche vos API REST afin qu'elles soient accessibles directement sans aucune authentification. Par conséquent, toutes ces API REST sur liste blanche sont accessibles au public.
Comment le configurer ?
Cette fonctionnalité est applicable aux méthodes JWT et OAuth 2.0 qui utilisent des jetons basés sur le temps pour authentifier les points de terminaison de l'API REST WordPress. Cette fonctionnalité vous permet de définir l'expiration personnalisée des jetons de telle sorte que le jeton ne sera plus valide une fois le jeton expiré.
Comment le configurer ?
Envoyez-nous un e-mail apisupport@xecurify.com pour des conseils rapides (par e-mail/réunion) sur vos besoins et notre équipe vous aidera à sélectionner la solution/le plan le mieux adapté à vos besoins.
Besoin d'aide? Nous sommes ici !
Merci pour votre demande.
Si vous n'avez pas de nouvelles de nous dans les 24 heures, n'hésitez pas à envoyer un e-mail de suivi à info@xecurify.com
Cette déclaration de confidentialité s'applique aux sites Web miniorange décrivant la manière dont nous traitons les informations personnelles. Lorsque vous visitez un site Web, celui-ci peut stocker ou récupérer des informations sur votre navigateur, principalement sous la forme de cookies. Ces informations peuvent concerner vous, vos préférences ou votre appareil et sont principalement utilisées pour que le site fonctionne comme vous le souhaitez. Les informations ne vous identifient pas directement, mais elles peuvent vous offrir une expérience Web plus personnalisée. Cliquez sur les titres des catégories pour vérifier comment nous traitons les cookies. Pour la déclaration de confidentialité de nos solutions, vous pouvez vous référer au Politique de confidentialité.
Les cookies nécessaires contribuent à rendre un site Web pleinement utilisable en activant les fonctions de base telles que la navigation sur le site, la connexion, le remplissage de formulaires, etc. Les cookies utilisés pour la fonctionnalité ne stockent aucune information personnelle identifiable. Cependant, certaines parties du site Web ne fonctionneront pas correctement sans les cookies.
Ces cookies collectent uniquement des informations agrégées sur le trafic du site Web, notamment les visiteurs, les sources, les clics et les vues des pages, etc. Cela nous permet d'en savoir plus sur nos pages les plus et les moins populaires ainsi que sur l'interaction des utilisateurs sur les éléments exploitables et ainsi de permettre nous améliorons les performances de notre site Web ainsi que de nos services.