OAuth 2.0 pour les appels

Revised: 11 August 2021

1. Configurez Coupa

  1. Les administrateurs peuvent créer, afficher et modifier des appels à partir des  > appels d'>intégrations d'installationmais ils ne peuvent créer de nouveaux points de terminaison que lors de la création d'un nouvel appel. Lors de la création d'un nouvel appel, votre administrateur d'intégration peut utiliser un point de terminaison précédemment défini ou utiliser le lien Créer un nouveau point de terminaison 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étails du point de terminaison, assurez-vous d'utiliser HTTP et de 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 et le secret du client 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 ci-dessous :

    {
    
    		"access_token" : "",
    
    		"token_type" : "porteur",
    
    		"expires_in" : 86399
    
    }
  4. La réponse qui contient le jeton d'accès doit être au format ci-dessous :

    réponse = 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" => "informations d'identification du client" }
    
    				request_body.merge !(scope : scope) si scope.present?
    
    				request.body = request_body.to_json
    
    			else
    
    				request.body = "grant_type=client_credentials"
    
    				request.body +="&scope="+scope si scope.present?
    
    			fin

3. Traitement des erreurs

  1. Seules les transactions échouées apparaissent dans la section des erreurs d'appel,<customer_instance>/call_outs/<call out id>

  2. Erreurs et ce qu'elles signifient

    • { "statusCode" : 401, "message" : "Non autorisé. Le jeton d'accès est manquant ou non valide." } : Problème avec la réponse qui contient le jeton, vérifiez le format
    • { "statusCode" : 404, "message" : "Ressource introuvable" } : Problème de publication de la charge utile dans le système externe
    • {Exception HTTP survenue :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/bac à sable mais en production ou vice versa, demandez au client de régénérer le mot de passe.

4. Exemple de charge utile (FACTEUR)

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

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

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