OAuth 2.0 pour les appels

Revised: 11 August 2021

1. Configurer Coupa

  1. 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.

  2. 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.

  3. 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

  1. 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}")

  2. La longueur du jeton ne devrait pas être un problème (nous avons testé avec succès jusqu'à 1258 caractères)

  3. La réponse qui contient le jeton d'accès doit être au format suivant :

    {
    		"access_token": "",
    		"token_type": "bearer",
    		"expires_in": 86399
    }
  4. 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

  1. Seules les transactions ayant échoué apparaissent sous la section Erreurs d'appel, <customer_instance>/call_outs/<call out id>

  2. 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.
  3. 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)

  1. Téléchargez le fichier de charge utile Postman.

  2. Utilisez l'option d'importation dans postman pour importer la collection :
    postman-import.png

  3. Ajouter l'URL, le nom d'utilisateur et le mot de passe :
    postman-02.png

Veuillez noter que certaines parties de ce contenu peuvent avoir été générées par traduction automatique.