Comment utiliser les API de Google sheets en ABAP avec une authentification de serveur à serveur ?

Traitement en cours…
Terminé ! Vous figurez dans la liste.

L’objectif de ce blog est de vous montrer comment créer/modifier/supprimer des feuilles Google via des programmes d’arrière-plan de SAP.

Comme il s’agit de tâches d’arrière-plan exécutées par le système SAP, ce n’est pas à l’utilisateur de s’authentifier auprès de Google puisqu’il n’y a pas d’action humaine. Nous ne pouvons donc pas choisir les méthodes où l’utilisateur s’authentifie directement pour effectuer l’extraction vers Google, comme ceci par exemple :

Pour utiliser cette méthode, vous devez consulter la documentation ici :

https://www.sap.com/documents/2018/07/56e0dd6d-0f7d-0010-87a3-c30de2ffd8ff.html

Dans le cas d’une connexion de serveur à serveur, nous travaillerons de cette manière :

Développement

Le contenu suivant est inspiré de cet article : https://blogs.sap.com/2019/11/10/connect-from-as-abap-to-google-cloud-platform-app-engine-resource-secured-with-google-identity-aware-proxy/?fbclid=IwAR2H4FpeB_HMuSw6yF9NFTpBFxKmQfTnwJwrEpKbAVxEfQdxh1P_Ae_Tm1U

  • Créer un projet Google Cloud Platform :
  • Dans le projet, créez un compte de service

Naviguez vers IAM&Admin -> Comptes de service et créez un nouveau compte de service. Saisissez un nom et une description et cliquez sur créer. Sur l’écran suivant, vous devez sélectionner un rôle.

Tapez IAP dans la recherche et sélectionnez le rôle IAP-secured Web App User.

  • Et obtenir la clé au format P12

Après la création de votre compte de service, vous pouvez créer votre clé au format P12.

Le téléchargement du fichier P12 devrait commencer sur votre machine locale. Le compte de service permet d’accéder aux ressources du nuage, il faut donc le conserver en toute sécurité. Notez le secret indiqué pour une utilisation ultérieure.

  • Importer le certificat du compte de service dans STRUST

Avant de pouvoir écrire du code ABAP et utiliser l’API Google, nous devons nous assurer de deux choses : Premièrement, nous devons importer le fichier P12 dans le système AS ABAP, deuxièmement, nous devons nous assurer que Google est une source de confiance pour la communication.

  • Créer une nouvelle application SSF

Nous devons créer une nouvelle entrée dans la table SSFAPPLIC. Allez à la transaction SE16 et ouvrez la table. Créez une nouvelle entrée.

Utilisez JWR_SI pour APPLIC et sélectionnez tout sauf B_INCCERTS, B_DETACHED, B_ASKPWD. En tant que Description, nous définissons la Signature JWT. Cette entrée sera plus tard un nouveau noeud dans la transaction STRUST où nous pourrons importer des certificats. Sauvegardez la nouvelle entrée.

Ouvrez ensuite la transaction SSFA. Appuyez sur « New Entries ». Créez une nouvelle entrée comme indiqué ci-dessous

Nous avons maintenant un nouveau nœud dans la transaction STRUST.

  • Importer des certificats dans STRUST

Ouvrez la transaction STRUST et un nouveau noeud devrait être disponible avec le nom « SSF JWT Signature ».

Passez en mode « Edition », faites un clic droit sur le nouveau nœud et sélectionnez « Créer ».

Dans la fenêtre suivante, réglez l’algorithme sur « RSA », la force de la clé sur « 2048 » et l’algorithme de signature sur « SHA256 ».

Confirmez la sélection et le nouveau nœud sera maintenant disponible pour les importations. Dans le menu du haut, sélectionnez « PSE->Import » et sélectionnez le fichier P12 du compte de service que vous avez téléchargé. Il se peut que vous deviez entrer le secret qui a été affiché lors du téléchargement du fichier P12 depuis GCP.

Le fichier P12 est maintenant chargé dans le nœud « File » de STRUST. Ensuite, nous devons le déplacer du nœud « File » vers la bonne application SSF. Dans le menu supérieur, sélectionnez « PSE->Save as ». Dans la fenêtre suivante, sélectionnez « SSF Application » et sélectionnez l’application SSF que nous avons créée dans les étapes précédentes (JWR_SI).

Confirmez la sélection et appuyez sur « Enregistrer ». Nous avons ainsi importé le fichier Service Account P12 dans l’ABAP AS et pouvons l’utiliser pour signer notre JWT pour les demandes adressées à GCP. Avec STRUST, nous disposons d’un endroit sûr pour stocker la clé privée du compte de service et les informations relatives au certificat.

La clé privée et le certificat du compte de service GCP ont été importés dans le système.

  • Créer la connexion dans SAP

Ensuite, nous devons faire de Google une source de confiance pour la communication. Cela peut être réalisé en important l’autorité de certification racine de Google dans STRUST.

Téléchargez le certificat Google nécessaire à partir du navigateur (voir avec votre équipe SAP BASIS). Dans la transaction STRUST sur le client SSL Client SSL (Anonyme).

Google est maintenant une source de confiance pour la communication et nous avons créé les connexions HTTP qui seront utilisées pour la communication dans notre code ABAP plus tard.

Note : Vous pouvez tester votre connexion en cliquant sur « Connection test » :

Vous devriez obtenir une erreur 404 (c’est normal).

Si vous avez un message d’erreur SSL, vous avez un problème avec vos certificats Google.

Essayez de voir avec votre équipe SAP BASIS les erreurs dans les journaux ICM (TCODE SMICM).

  • Créer les méthodes ABAP qui vont :

Créer et signer un jeton JWT dans SAP

L’envoyer à Google pour l’échanger contre un jeton d’authentification à placer dans l’en-tête de chaque appel API vers les ressources Google (drive, sheets, docs, etc…).

  • Créer la classe ZCL_GCP_API_HANDLER
  • Créer 2 structures zgcp_jwt_header et zgcp_jwt_payload.

ALG signifie Algorithme et comprendra l’algorithme utilisé pour le cryptage, à savoir RS256.

TYP signifie « token type » (type de jeton) et sera JWT.

ISS signifie émetteur et sera le nom de notre compte de service Google.

AUD signifie audience, c’est-à-dire le consommateur du jeton.

TARGET_AUDIENCE est l’identifiant de notre client OAUTH chez Google.

IAT signifie issued at time (émis à l’heure) et correspond à l’heure UNIX à laquelle nous avons créé le jeton.

EXP signifie expires et correspond à la date d’expiration du jeton en heure UNIX.

https://blogs.sap.com/2019/11/10/connect-from-as-abap-to-google-cloud-platform-app-engine-resource-secured-with-google-identity-aware-proxy/?fbclid=IwAR2H4FpeB_HMuSw6yF9NFTpBFxKmQfTnwJwrEpKbAVxEfQdxh1P_Ae_Tm1U

  • Créez un programme qui appellera les méthodes ci-dessus pour s’identifier.
  1. Nous spécifions toutes les variables nécessaires à la création du JWT et à sa signature
  2. Lancement du programme pour générer et signer le JWT.
  3. Lancer la classe pour générer le jeton d’authentification en envoyant le JWT signé à Google qui renvoie un jeton. Le jeton Google se trouve dans la variable lv_oidc.

With this token, it is now possible to call google APIs by specifying the token in the call header.

Now we can create a test program calling the google sheets APIs with our authentication token 

You can test your calls here : 

https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/update

By inspecting, it is possible to find the url to specify in the call to have this operation:

Pour voir des exemples d’appels dans SAP, j’ai créé un programme de test :

Exemple pour créer une feuille blanche :

Exemple d’ajout de valeurs dans la feuille de calcul :

Conclusion

Vous pouvez maintenant créer/modifier/supprimer des feuilles Google. En utilisant cette technique vous pouvez interagir avec toutes les API de google (drive, doc, sheet, etc…).

Laisser un commentaire