miky
Septembre 19, 2024, 7:12
1
Bonjour,
Je ne parviens absolument pas à faire une requête API vers mon dolibarr (je commence donc, cela n’a jamais fonctionné pour moi).
# grep csrf htdocs/conf/conf.php
$dolibarr_nocsrfcheck='1';
Mais j’ai aussi ajouté en GUI
CSRFCHECK_WITH_TOKEN = 0
MAIN_SECURITY_CSRF_WITH_TOKEN = 0
Je fais cette requête curl
$ curl -X POST -H "DOLAPIKEY: 2v8yzT0FKtmsHRT4O3WoZt69g6KttK63" -H "Content-Type: application/json" -H "Accept: application/json; indent=4" -H "Referer: http://dolibarr.mondomaine.org" " http://dolibarr.mondomaine.org/api/index.php/thirdparties --data '{ "name": "NOM123", "email": "", "client": "1", "code_client": "-1" }'
Et j’ai l’erreur suivante
Access refused by CSRF protection in main.inc.php. Referer of form () is outside the server that serve this page (with method = POST).
If you access your server behind a proxy using url rewriting, you might check that all HTTP headers are propagated (or add the line $dolibarr_nocsrfcheck=1 into your conf.php file to remove this security check).
Pour faire ma requête, j’ai mis en dur dans /etc/hosts
1.2.3.4 dolibarr.mondomaine.org
Et j’ai utilisé HTTP au lieu de HTTPS volontairement.
Je peux ainsi faire une capture réseau si besoin.
Quand j’execute curl avec l’option -v je vois bien
> POST /api/index.php/thirdparties HTTP/1.1
> Host: dolibarr.mondomaine.org
> User-Agent: curl/8.9.0
> DOLAPIKEY: 2v8yzT0FKtmsHRT4O3WoZt69g6KttK63
> Content-Type: application/json
> Accept: application/json; indent=4
> Referer: http://dolibarr.mondomaine.org
> Content-Length: 69
Le message d’erreur m’indique qu’un token n’est pas fourni alors que normalement c’est sous la forme DOLAPIKEY
Un utilisateur est créé et a une clé/token attribuée, il a tous les droits sur les tiers
Cordialement
Bonjour,
j’utilise l’API également et je n’ai pas eu besoin de désactiver le CSRF. Il vaut mieux remettre et chercher d’où ça vient le problème.
Beers
Septembre 23, 2024, 2:45
3
miky:
CSRFCHECK_WITH_TOKEN = 0
Bonjour,
Dans le code la vérification se fait sur l’existence ou non de cette constante, sa valeur n’est pas prise en compte.
Donc le fait de mettre zéro ne désactive rien, il faut supprimer la constante.
1 « J'aime »
Bonjour
La requête me parait un peu courte.
La structure est la suivante :
$url = 'https://monsite.truc/api/index.php';
$headers = ['Accept: application/json',
'DOLAPIKEY: '.$token, //la clé api rangée en sécurité quelque part
'contact_list: 1',
];
curl_setopt_array($curl, [
CURLOPT_URL => sprintf($param,$url,$search), //$param contient le repertoire de recherche pour la requete
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => 'utf-8',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_2TLS,
CURLOPT_CUSTOMREQUEST => 'GET',
CURLOPT_HTTPHEADER => $headers,
]
);
$response = curl_exec($curl);
A essayer dans postman par exemple pour ajuster les paramètres, tester les réponses et récupérer le code…
Francis
W1W1M
Septembre 25, 2024, 7:47
5
Bonjour,
Je ne sais pas si cela aidera pour votre problème mais j’avais du activer le paramètre Disable compression of API responses
dans l’admin du module API pour le faire fonctionner.
Bon courage
miky
Septembre 27, 2024, 1:11
6
Bonjour,
Merci pour vos réponses.
J’ai l’impression d’avoir un peu progressé.
J’ai modifié ma configuration Nginx.
Et à présent j’ai l’erreur suivante
{
"error": {
"code": 404,
"message": "Not Found"
},
"debug": {
"source": "Routes.php:457 at route stage",
"stages": {
"success": [
"get"
],
"failure": [
"route",
"negotiate",
"message"
]
}
}
}
Pourriez-vous m’indiquer si la syntaxe du module est thirdparty ou thridparties ?
Je parviens à accéder à la page explorer de l’API via mon navigateur mais lorsque je mets ma DOLAPIKEY rien ne se passe
miky
Septembre 27, 2024, 11:31
7
J’ai ouvert un nouveau sujet concernant la configuration Nginx car j’ai l’impression que les problèmes viennent de là.
miky
Octobre 2, 2024, 11:28
8
Bonjour,
Pour résoudre le problème j’ai du refaire la configuration NGinx et m’assurer que cgi.fix_pathinfo est positionnée à 1 et non à 0