OAuth 2.0 pour les appels
1. Configurer Coupa
-
Les administrateurs peuvent créer, afficher et modifier des appels à partir deConfiguration > Intégrations > Appels, mais ils ne peuvent créer de nouveaux points de terminaison que lors de la création d'un nouvel appel à l'attention de l'administrateur Lors de la création d'un nouvel appel à l'attention de l'administrateur,celui-ci peut utiliser un point de terminaison précédemment défini ou utiliser le lien Créer nouveau pour définir un nouveau point de terminaison.
-
Les paramètres OAuth sont disponibles dans la configuration du point de terminaison. Dans la section Détail du point de terminaison, veillez à utiliser HTTP et à fournir le nom de l'hôte, l'URL du jeton, l'ID du client et le secret du client.
-
Lien vers la documentation détaillée : https://success.coupa.com/Support/Releases/26/New_Features/BSM_Platform/Coupa_Platform/Call_Outs_Support_OAuth_2.0
2. Configuration du système client/middleware
-
L'ID client et le secret doivent être configurés en tant que chaîne d'authentification :
auth_string = Base64.urlsafe_encode64("#{client_id}:#{client_secret}")
-
La longueur du jeton ne devrait pas être un problème (nous avons testé avec succès jusqu'à 1258 caractères)
-
La réponse qui contient le jeton d'accès doit être au format suivant :
{ "access_token": "", "token_type": "bearer", "expires_in": 86399 }
-
La réponse qui contient le jeton d'accès doit être au format suivant :
response = connection.post do |request| request.headers[:content_type] = (content_type || 'application/x-www-form-urlencoded') request.headers[:cache_control] = 'no-cache' request.headers[:Authorization] = "Basic #{auth_string}" request.headers[:accept] = 'application/json' if content_type == 'application/json' request_body = { "grant_type" => "client_credentials" } request_body.merge!(scope: scope) if scope.present? request.body = request_body.to_json else request.body = "grant_type=client_credentials" request.body +="&scope="+scope if scope.present? end
3. Traitement des erreurs
-
Seules les transactions ayant échoué apparaissent sous la section Erreurs d'appel,
<customer_instance>/call_outs/<call out id>
-
Erreurs et leur signification
{ "statusCode": 401, "message": "Unauthorized. Access token is missing or invalid." }
: Problème avec la réponse qui contient le jeton, vérifiez le format{ "statusCode": 404, "message": "Resource not found" }
: Problème de validation de la charge utile sur le système externe{HTTP exception occured:Service::Oauth::AuthenticationManager::AuthenticationError}
: Problème de configuration dans le middleware, impossible d'accéder au jeton.
-
Si vous ne rencontrez aucun problème dans les instances de test/sandbox, mais en production ou vice versa, demandez au client de régénérer le mot de passe.
4. Exemple de charge utile (POSTMAN)
-
Téléchargez le fichier de charge utile Postman.
-
Utilisez l'option d'importation dans postman pour importer la collection :
-
Ajouter l'URL, le nom d'utilisateur et le mot de passe :
Veuillez noter que certaines parties de ce contenu peuvent avoir été générées par traduction automatique.