|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
Utilisation des API Microsoft Graph |
Débuté par ROMULUS001, 20 jan. 2021 11:02 - 7 réponses |
| |
| | | |
|
| |
Membre enregistré 352 messages Popularité : +12 (18 votes) |
|
Posté le 20 janvier 2021 - 11:02 |
Bonjour, Je débute dans l'utilisation des API Microsoft Graph, je rencontre beaucoup de difficultés à les utiliser.
J'avais lu cet article très bien fait: https://developer.microsoft.com/en-us/graph/blogs/30daysmsgraph-day-13-postman-to-make-microsoft-graph-calls/
Où je faisais mes premiers tests sur Postman, j'arrivais à générer un access token, mais à l'utiliser lors d'appels de fonctions, me disant que mon token n'a pas les droits, alors que j'avais déjà défini des droits (dans mon cas, je veux récupérer mon calendrier).
J'ai alors voulu voir comment traduire le code en wlangage, là aussi, je rencontre des difficultés quant à la génération du token.
Voici mon code :
OAuth2Params est OAuth2Paramètres OAuth2Params..ClientID = gf_CLientID OAuth2Params..ClientSecret = gf_ClientSecret OAuth2Params..URLAuth = ChaîneConstruit("https://login.microsoftonline.com/%1/oauth2/v2.0/authorize",gf_TenantID) OAuth2Params..URLToken = ChaîneConstruit("https://login.microsoftonline.com/%1/oauth2/v2.0/token",gf_TenantID)
OAuth2Params..ParamètresSupplémentaires = "force_reapprove=false" OAuth2Params..Scope = "offline_access User.Read" MonToken est un AuthToken = AuthIdentifie(OAuth2Params)
MonToken = AuthIdentifie(OAuth2Params)
Concernant mes ID :
A l'exécution, je rencontre cette erreur :
Pourriez-vous m'aider à avancer? Je n'arrive pas à trouver de la documentation claire et précise sur le code à mettre en place.
Merci |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 352 messages Popularité : +12 (18 votes) |
|
Posté le 20 janvier 2021 - 11:34 |
J'ai vu qu'il était possible de faire des appels REST, j'ai mis le code suivant :
MaRequete est une restRequête MaRequete..Header["Content-Type"]="application/x-www-form-urlencoded" MaRequete..Header["Host"]="login.microsoftonline.com"
MaRequete..Méthode=httpPost MaRequete..URL=ChaîneConstruit("https://login.microsoftonline.com/%1/oauth2/v2.0/token",gf_TenantID)
ContenuBody est un JSON ContenuBody.grant_type = "client_credentials" ContenuBody.client_id = gf_CLientID ContenuBody.scope = "https://graph.microsoft.com/.default" ContenuBody.client_secret = gf_ClientSecret
MaRequete..Contenu=ContenuBody.VersChaîne()
MaReponseRequete est une restRéponse MaReponseRequete=RESTEnvoie(MaRequete)
Au niveau de la réponse, j'ai ceci :
{ "error":"invalid_request", "error_description":"AADSTS900144: The request body must contain the following parameter: 'grant_type'.\r\nTrace ID: 8b83d56b-a7c3-440c-9cd9-bbf231c9a600\r\nCorrelation ID: dcf611a2-8a5e-4d70-a3c2-2fa40262ae42\r\nTimestamp: 2021-01-20 10:22:10Z", "error_codes": [ 900144 ], "timestamp":"2021-01-20 10:22:10Z", "trace_id":"8b83d56b-a7c3-440c-9cd9-bbf231c9a600", "correlation_id":"dcf611a2-8a5e-4d70-a3c2-2fa40262ae42", "error_uri":"https:\/\/login.microsoftonline.com\/error?code=900144" }
Je n'arrive pas à comprendre le message d'erreur, j'ai bien spécifié le grant_type dans le contenu de ma requête.
|
| |
| |
| | | |
|
| | |
| |
Membre enregistré 352 messages Popularité : +12 (18 votes) |
|
Posté le 20 janvier 2021 - 11:53 |
Je m'auto-réponds, j'arrive à générer un access token, l'erreur provenait du contenu de la requête, il faut utiliser la syntaxe suivante :
ContenuBody est une chaîne ContenuBody="grant_type=client_credentials&client_id=[%gf_CLientID%]&client_secret=[%gf_ClientSecret%]&scope=https%3A%2F%2Fgraph.microsoft.com%2F.default"
MaRequete..Contenu=ContenuBody
Je retombe par contre sur la problématique de tout à l'heure, c'est de consommer des fonctions à l'aide du token, où mon token n'aurait pas les autorisations pour pouvoir faire appel |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 22 messages Popularité : +7 (7 votes) |
|
Posté le 26 février 2021 - 16:18 |
Hello,
Procedure Authentification_SharePoint():booléen
OAuth2Params is an OAuth2Parameters
OAuth2Params..ClientID = "6ba7c357-977c-4dbe-a5eb-83e562099e57"
OAuth2Params..ClientSecret = "XXXXXXX Your Secret XXXXXXXXXXXXXXX"
OAuth2Params..AuthURL = "https://login.microsoftonline.com/common/oauth2/v2.0/authorize" OAuth2Params..TokenURL = "https://login.microsoftonline.com/common/oauth2/v2.0/token"
OAuth2Params..RedirectionURL= "https://smart.lemo.com/WD240AWP/WD240Awp.exe/OAUTH2_RETOUR"
OAuth2Params..Scope = "Sites.ReadWrite.All"
gnMontoken = AuthIdentify(OAuth2Params)
IF gnMontoken <> Null THEN IF ErrorOccurred THEN Error("Une erreur s'est produite lors de la tentative de connexion a SharePoint " + CR + ErrorInfo()) RESULT False END RESULT True END
Et ensuite on peut interroger Graph, sharepoint ... etc.
cMyReauestHTTPsend is a httpRequest cMaRequêteHTTPreponse is a httpRequest vAnswer is Variant SPSiteID is string
cMyReauestHTTPsend..URL = "https://graph.microsoft.com/v1.0/me" cMyReauestHTTPsend..Content = URLEncode("api-version=1.6") cMyReauestHTTPsend..Method = httpGet cMyReauestHTTPsend..AuthToken = gnMontoken cMyReauestHTTPsend..ContentType = "application/json" cMyReauestHTTPsend..Header["Authorization"] = "Bearer "+gnMontoken..Value
cMaRequêteHTTPreponse = HTTPSend(cMyReauestHTTPsend)
vResponse = JSONToVariant(cMaRequêteHTTPreponse..Content)
-- Bernard Vésy |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 311 messages |
|
Posté le 10 juin 2024 - 16:31 |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 57 messages |
|
Posté le 21 juin 2024 - 20:34 |
Bonjour Je vais apporter aussi ma petite pierre à l'édifice. J'ai une procédure similaire à celle de Bernard
La première chose à faire est de créer une application dans Microsoft Entra et lui donner des autorisations Graph en mode "application". Cela évite d'avoir un écran de login/mot de passe. Le hic ici est que la secret key n'est valable que 720 jours max. Mais on peut quand même adapter (https://www.alitajran.com/renew-client-secret/)
Une fois cela fait on code dans Windev
GetToken = ma procédure pour générer un token
ReqToken est une restRequête ReqToken..Méthode = httpPost ReqToken..URL = "https://login.microsoftonline.com/"+O365_TENANT_ID+"/oauth2/v2.0/token" ReqToken..ContentType = "application/x-www-form-urlencoded" ReqToken..Contenu = URLEncode("grant_type=client_credentials&client_id="+ClientID+"&client_secret="+ClientSecret+"&scope="+"https://graph.microsoft.com/.default")
réponseHTTP est une restRéponse réponseHTTP = RESTEnvoie(ReqToken) SI ErreurDétectée ALORS RENVOYER Faux FIN
MonTokenParam est un OAuth2Paramètres MonTokenParam.ClientID = ClientID MonTokenParam.ClientSecret = ClientSecret MonTokenParam.URLAuth = "https://login.microsoftonline.com/"+O365_TENANT_ID+"/oauth2/v2.0/authorize" MonTokenParam.URLToken = "https://login.microsoftonline.com/"+O365_TENANT_ID+"/oauth2/v2.0/token" MonTokenParam.URLRedirection = "http://localhost:9000/" MonTokenParam.Scope = "https://graph.microsoft.com/.default"
SI réponseHTTP..CodeEtat = 200 ALORS jsonReceived est un Variant = JSONVersVariant(réponseHTTP..Contenu) wMonToken est un AuthToken(MonTokenParam,réponseHTTP..Contenu) gTokenO365 <= wMonToken RENVOYER True; ELSE RENVOYER False; END
O365_TENANT_ID = constant avec l'ID du Tenant 0365 ClientID = constant avec l'ID de l'app créée dans Entra ClientSecret = secret key générée lors de la création de l'app (bien prendre note car ne sera pas représentée) gTokenO365 est une variable globale dans mon cas
Procédure pour récupérer tous les fichiers dans une bibliothèque SharePoint
j est un JSON vData est un Variant
GetToken()
IdDriveNomBiblio est une chaîne = "IdDeMaBibliothèque" maRequete est une httpRequête maReponse est une httpRéponse
maRequete.Méthode = httpGet maRequete.ContentType = "application/json" maRequete.AuthToken = gTokenO365 maRequete.Entête["Authorization"] = "Bearer "+gTokenO365..Valeur tabFile est un tableau de * par 4 chaîne
TraiterDossier("",True,"")
PROCEDURE INTERNE TraiterDossier(LOCAL pId est une chaîne, pRoot est un booléen, pdossier est une chaîne) IF pRoot THEN maRequete.URL="https://graph.microsoft.com/v1.0/drives/[%IdDriveNomBiblio%]/root/children" ELSE maRequete.URL="https://graph.microsoft.com/v1.0/drives/[%IdDriveNomBiblio%]/items/[%pId%]/children" END emptyJson est un JSON maRequete.Contenu = emptyJson maReponse = maRequete.Envoie() j = maReponse.Contenu vData = JSONVersVariant(j) FOR EACH obj OF vData.value IF obj["folder"]<>Null THEN TraiterDossier(obj.id,False,pdossier+"/"+obj.name) ELSE IF obj["file"]<>Null THEN tabFile.AjouteLigne(obj.name,pdossier,obj.webUrl,obj.id) END END FIN
En espérant que cela puisse aider |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 311 messages |
|
Posté le 08 juillet 2024 - 16:55 |
Bonjour,
Est-il possible de déposer un document dans un répertoire Sharepoint via Graph quand on a un token ? Si oui quelle commande utiliser ?
Merci à vous !
-- Pascal |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 57 messages |
|
Posté le 10 juillet 2024 - 09:31 |
Pascal a écrit :
Bonjour,
Est-il possible de déposer un document dans un répertoire Sharepoint via Graph quand on a un token ? Si oui quelle commande utiliser ?
Merci à vous !
-- Pascal
Bonjour Je pense bien que oui. Je n'ai pas de code à présenter mais la première chose à regarder est cette page chez MS : https://learn.microsoft.com/en-us/graph/api/driveitem-update… |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|