PC SOFT

GRUPOS DE DISCUSSÃO PROFISSIONAL
WINDEVWEBDEV e WINDEV Mobile

Inicio → WINDEV 2024 → Interface à box.com - oAuth
Interface à box.com - oAuth
Iniciado por Eggimann Jean-Luc, jul., 20 2015 8:31 AM - 22 respostas
Publicado em julho, 20 2015 - 8:31 AM
Bonjour,
J'essaie d'intégrer Box.com (stockage dans le cloud), notamment à l'aide de l'exemple de la LST 91.
Idéalement, je souhaite pouvoir uploader/downloader des fichiers dans un seul "répertoire" avec un seul user Box et procéder de manière transparente pour les utilisateurs de l'application, sans fenêtre de Login à Box. ie comme je le fais actuellement avec ftp avec des paramètres stockés cryptés avec l'application (username, password, ...).

Quelqu'un a-t-il de l'expérience dans le domaine (oAuth2 / Box) ?
Merci d'avance pour votre aide.
Membro registado
28 mensagems
Publicado em junho, 08 2017 - 2:31 PM
Bonjour,

J'ai le même problème.
Avez-vous eu des nouvelles ?

Merci,

Eric
Mensagem modificada, junho, 08 2017 - 2:31 PM
Membro registado
2.566 mensagems
Popularité : +222 (260 votes)
Publicado em junho, 08 2017 - 3:10 PM
Bonjour,

Tout est expliqué ici: https://developer.box.com/v2.0/reference…

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membro registado
28 mensagems
Publicado em junho, 08 2017 - 4:39 PM
Merci Philippe,

Ayant une version 19 de WD et WD Mobile, je ne pourrais utiliser les fonctions. Donc update obligatoire vers 22.

@+
Membro registado
2.566 mensagems
Popularité : +222 (260 votes)
Publicado em junho, 08 2017 - 6:27 PM
Absolument pas. le protocole oAuth2 n'est qu'une suite de requête http. tu envoies une requête vers le serveur BOX.com, le serveur te renvoie un code quite permet de t'authentifier et de récupérer un token.

C'est grâce à ce token que tu peux envoyer tes requêtes. La seule obligation est d'avoir une URL pour pouvoir recevoir les code d'authentification et le token. Il faut obligatoirement utiliser du https.

J'ai écris la connexion à Google et Outlook bien avant la 22. C'sst donc tout à fait possible et pas si compliqué que ça. Si tu te lances dedans et que tu bloques, postes ici on t'aidera.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membro registado
28 mensagems
Publicado em junho, 16 2017 - 10:33 PM
Bonsoir,

J'avance à pas compté.

Le code est vilain mais c'est pour les tests de base. Je ferai le ménage plus tard.

[/code]
sToken est une chaîne UNICODE = "TonToken"
surl est une chaîne UNICODE = "https://account.box.com/api/oauth2/authorize"
sagent est une chaîne UNICODE = "API-explorer-client"
sType est une chaîne UNICODE = "application/octet-stream"
sDataFichier est une chaîne ANSI
MY_CLIENT_ID est une chaîne UNICODE = MON ID
MY_CLIENT_SECRET est une chaîne UNICODE = MONSECRET
MY_REDIRECT_URL est une chaîne UNICODE = "MONIP
MY_SECURITY_TOKEN est une chaîne UNICODE = "LmtGdFvF5238$.#^"
ResLancement est un booléen


// Authorize
ResLancement = HTTPRequête("https://account.box.com/api/oauth2/authorize…)
SI ResLancement = Vrai ALORS
Trace("Le code AUTHORIZE HTML est : " + RC + HTTPDonneRésultat(httpCookie))
HTTPDestination("c:\Temp\Autorize.txt")
SINON
Info("Authorize oups")
FIN

// Juste pour voir ce que je fais
MaChaine est une chaîne = ExtraitChaîne(HTTPDonneRésultat(httpCookie),1,";")
Trace(MaChaine)
MaChaine = ExtraitChaîne(MaChaine,2,"=")
Trace(MaChaine)

MY_AUTH_CODE est une chaîne UNICODE = MaChaine

// Token
HTTPRequête("https://api.box.com/oauth2/token…)
SI ResLancement = Vrai ALORS
Trace("Le code TOKEN HTML est : " + RC + HTTPDonneRésultat(httpCookie))
SINON
Info("Token oups")
FIN

// Juste pour voir ce que je fais
MonToken est une chaîne = ExtraitChaîne(HTTPDonneRésultat(httpCookie),1,";")
Trace(MonToken)
MonToken = ExtraitChaîne(MonToken,2,"=")
Trace(MonToken)

MY_TOKEN est une chaîne UNICODE = MonToken

[/code]

Les réponses retour
z=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; path=/; domain=.account.box.com; secure; httponly
box_visitor_id=yyyyyyyyyyyyyyyyyyyy; expires=Sat, 16-Jun-2018 20:20:04 GMT; Max-Age=31536000; path=/; domain=.box.com; secure
site_preference=desktop; path=/; domain=.box.com; secure

Le code TOKEN HTML est :
box_visitor_id=yyyyyyyyyyyyyyyyyyyy; expires=Sat, 16-Jun-2018 20:20:05 GMT; Max-Age=31536000; path=/; domain=.box.com; secure
bv=OPS-41811; expires=Fri, 23-Jun-2017 20:20:05 GMT; Max-Age=604800; path=/; domain=.app.box.com; secure
cn=22; expires=Sat, 16-Jun-2018 20:20:05 GMT; Max-Age=31536000; path=/; domain=.app.box.com; secure
site_preference=desktop; path=/; domain=.box.com; secure


Dans le fichier TXT j'ai
{"error":"invalid_request","error_description":"Invalid grant_type parameter or parameter missing"}


Quelque chose cloche, toujours pas de access_token sachant que je suis de machine à machine, donc sans interface.


Merci de votre aide,

Eric
Publicado em junho, 21 2017 - 11:34 AM
Bonjour,

J'ai fais des essais mais je rame.
J'ai placé le bout de code testé avec les réponses.
Je n'ai jamais un retour avec TOKEN = dans la réponse.


Merci de votre précieuse et sympathique aide.

Eric
Membro registado
2.566 mensagems
Popularité : +222 (260 votes)
Publicado em junho, 21 2017 - 1:17 PM
Bonjour,

Il faut le code du httpRequete que tu envoies sinon on ne sait pas ce que tu envoies. Retire l'ID client et le code secret.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Publicado em junho, 21 2017 - 2:18 PM
Bonjour,

Voici, le code

[/code]
sToken est une chaîne UNICODE = "TonToken"
surl est une chaîne UNICODE = "https://account.box.com/api/oauth2/authorize"
sagent est une chaîne UNICODE = "API-explorer-client"
sType est une chaîne UNICODE = "application/octet-stream"
sDataFichier est une chaîne ANSI
MY_CLIENT_ID est une chaîne UNICODE = MON ID
MY_CLIENT_SECRET est une chaîne UNICODE = MONSECRET
MY_REDIRECT_URL est une chaîne UNICODE = "MONIP
MY_SECURITY_TOKEN est une chaîne UNICODE = "LmtGdFvF5238$.#^"
ResLancement est un booléen


// Authorize
ResLancement = HTTPRequête("https://account.box.com/api/oauth2/authorize…)
SI ResLancement = Vrai ALORS
Trace("Le code AUTHORIZE HTML est : " + RC + HTTPDonneRésultat(httpCookie))
HTTPDestination("c:\Temp\Autorize.txt")
SINON
Info("Authorize oups")
FIN

// Juste pour voir ce que je fais
MaChaine est une chaîne = ExtraitChaîne(HTTPDonneRésultat(httpCookie),1,";")
Trace(MaChaine)
MaChaine = ExtraitChaîne(MaChaine,2,"=")
Trace(MaChaine)

MY_AUTH_CODE est une chaîne UNICODE = MaChaine

// Token
HTTPRequête("https://api.box.com/oauth2/token…)
SI ResLancement = Vrai ALORS
Trace("Le code TOKEN HTML est : " + RC + HTTPDonneRésultat(httpCookie))
SINON
Info("Token oups")
FIN

// Juste pour voir ce que je fais
MonToken est une chaîne = ExtraitChaîne(HTTPDonneRésultat(httpCookie),1,";")
Trace(MonToken)
MonToken = ExtraitChaîne(MonToken,2,"=")
Trace(MonToken)

MY_TOKEN est une chaîne UNICODE = MonToken

[/code]

Les réponses retour
z=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx; path=/; domain=.account.box.com; secure; httponly
box_visitor_id=yyyyyyyyyyyyyyyyyyyy; expires=Sat, 16-Jun-2018 20:20:04 GMT; Max-Age=31536000; path=/; domain=.box.com; secure
site_preference=desktop; path=/; domain=.box.com; secure

Le code TOKEN HTML est :
box_visitor_id=yyyyyyyyyyyyyyyyyyyy; expires=Sat, 16-Jun-2018 20:20:05 GMT; Max-Age=31536000; path=/; domain=.box.com; secure
bv=OPS-41811; expires=Fri, 23-Jun-2017 20:20:05 GMT; Max-Age=604800; path=/; domain=.app.box.com; secure
cn=22; expires=Sat, 16-Jun-2018 20:20:05 GMT; Max-Age=31536000; path=/; domain=.app.box.com; secure
site_preference=desktop; path=/; domain=.box.com; secure


Dans le fichier TXT j'ai
{"error":"invalid_request","error_description":"Invalid grant_type parameter or parameter missing"}



Merci

Eric
Membro registado
2.566 mensagems
Popularité : +222 (260 votes)
Publicado em junho, 21 2017 - 6:20 PM
Ce qu'on ne voit pas c'est ça ce qu'il y a derrière les points de suspension
HTTPRequête("https://account.box.com/api/oauth2/authorize…)


--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membro registado
28 mensagems
Publicado em junho, 22 2017 - 7:22 AM
Bonjour;

Voici la commande

ResLancement = HTTPRequête("https://account.box.com/api/oauth2/authorize?+...
response_type=code&client_id="+MY_CLIENT_ID+"&redirect_uri="+MY_REDIRECT_URL+"&state="+MY_SECURITY_TOKEN)

Désolé de ne pas avoir vu les ...
La fenêtre du forum semble tronquer la ligne, pour rendre lisible j'ai ajouté +... et un retour à la ligne, ce qui n'est pas vrai dans le code source.

Merci

Eric
Mensagem modificada, junho, 22 2017 - 7:26 AM
Membro registado
2.566 mensagems
Popularité : +222 (260 votes)
Publicado em junho, 22 2017 - 5:27 PM
Bonsoir,

Voici un bout de code qui devrait plus ou moins fonctionner. N'oublies pas qu'il faut impérativement tester les retours pour les erreurs et dieu sait qu'elles peuvent être nombreuses (https://developer.box.com/v2.0/reference…).
N'oublie pas de tester le retour du state lors de la demande d'autorisation (MY_SECURITY_TOKEN) pour éviter le hijacking du compte.

Bon courage,

MY_SECURITY_TOKEN est une chaîne = DonneGUID(guidBrut)
MY_AUTH_CODE est une chaîne

Requete.URL = "https://account.box.com/api/oauth2/authorize?response_type=code&client_id=[%MY_CLIENT_ID%]&redirect_uri=[%URLEncode(MY_REDIRECT_URL)%]&state=[%MY_SECURITY_TOKEN%]"
Reponse = HTTPEnvoie(Requete)
HTM_SansNom1 = Reponse.Contenu

TANTQUE PAS HTM_SansNom1..Valeur [= MY_REDIRECT_URL
Multitâche(-1)
FIN

sErreur est une chaîne


SI ChaîneOccurrence(HTM_SansNom1..Valeur,"error") > 0 ALORS
POUR TOUTE chaîne parametre de ExtraitChaîne(HTM_SansNom1..Valeur,2,"?"SEPAREE PARAR "&"
sErreur += [RC] + ExtraitChaîne(parametre,1,"=") + " : " +Remplace(ExtraitChaîne(parametre,2,"="),"+"," ")
FIN
Erreur(sErreur)
RETOUR
FIN

SI ChaîneOccurrence(HTM_SansNom1..Valeur,"code") = 0 ALORS
Erreur("Erreur interne")
RETOUR
SINON
MY_AUTH_CODE = ExtraitChaîne(HTM_SansNom1..Valeur,2,"code=")
Requete.URL = "https://api.box.com/oauth2/token"
Requete.Méthode = httpPost
Requete.Contenu = "grant_type=authorization_code&code=[%MY_AUTH_CODE%]&client_id=[%URLEncode(MY_CLIENT_ID)%]&client_secret=[%URLEncode(MY_CLIENT_SECRET)%]"

Reponse = HTTPEnvoie(Requete)
FIN


--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Publicado em junho, 22 2017 - 6:21 PM
Bonsoir,

Merci pour ce bout de code, c'est vraiment sympa.

J'ai en en rouge "Requete", "Reponse" et "HTM_SansNom1", je suppose qu'ils doivent être déclaré en amont, sous qu'elle format ?

Merci

Eric
Membro registado
28 mensagems
Publicado em junho, 22 2017 - 9:45 PM
Bonsoir,

J'ai tenté Requete est un HTTPREQUETE, mais là c'est HTTPREQUETE, qui est un type inconnu.

Je suis en version 19, si ça peut être la cause.


Merci

Eric
Mensagem modificada, junho, 22 2017 - 9:46 PM
Membro registado
2.566 mensagems
Popularité : +222 (260 votes)
Publicado em junho, 23 2017 - 5:13 AM
La même en 19:
MY_SECURITY_TOKEN est une chaîne = DonneGUID(guidBrut)
MY_AUTH_CODE est une chaîne
taRetour est un tableau associatif de chaînes

SI PAS httpRequête("https://account.box.com/api/oauth2/authorize?response_type=code&client_id=[%MY_CLIENT_ID%]&redirect_uri=[%URLEncode(MY_REDIRECT_URL)%]&state=[%MY_SECURITY_TOKEN%]") ALORS
Erreur(ErreurInfo(errMessage))
RETOUR
FIN
HTM_SansNom1 = HTTPDonneRésultat(httpRésultat)

TANTQUE PAS HTM_SansNom1..Valeur [= MY_REDIRECT_URL
Multitâche(-1)
FIN

SI ChaîneOccurrence(HTM_SansNom1..Valeur,"error") > 0 ALORS
// On stocke dans un tableau associatif pour pouvoir récupérer les infos qui nous
// intéressent quelque soit l'ordre de renvoie (pour peu qu'un jour ça change) !!!
POUR TOUTE chaîne parametre de ExtraitChaîne(HTM_SansNom1..Valeur,2,"?"SEPAREE PARAR "&"
taRetour[ExtraitChaîne(parametre,1,"=")] = Remplace(ExtraitChaîne(parametre,2,"="),"+"," ")
FIN

//Ici on affiche l'erreur formatée comme on le souhaite
// Erreur(taRetour["error_code"],...)
RETOUR
FIN

SI ChaîneOccurrence(HTM_SansNom1..Valeur,"code") = 0 ALORS
Erreur("Erreur interne")
RETOUR
SINON
MY_AUTH_CODE = ExtraitChaîne(HTM_SansNom1..Valeur,2,"code=")
SI PAS httpRequête("https://api.box.com/oauth2/token","","","grant_type=authorization_code&code=[%MY_AUTH_CODE%]&client_id=[%URLEncode(MY_CLIENT_ID)%]&client_secret=[%URLEncode(MY_CLIENT_SECRET)%]") ALORS
Erreur(ErreurInfo(errMessage))
RETOUR
FIN
Trace(HTTPDonneRésultat(httpRésultat))
FIN


--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membro registado
28 mensagems
Publicado em junho, 23 2017 - 11:06 AM
Bonjour,

J'ai lancé des tests, j'ai un retour de Box, mais jamais de la forme <MY_REDIRECT_URL>?code=<MY_AUTHORIZATION_CODE>, ça commence toujours par <!DOCTYPE html><html lang="en-US"><head><title>Cu.......
De ce fait on trouve donc pas "code=" dans la réponse ce qui fait tourner en rond la boucle tantque pas.....
N'ayant pas de site internet, j'avais espéré que Box retourne l'autorisation à l'envoyeur.

Config Dans box,
Méthode d'authentification OAuth 2.0
Accès de l'application Application
Champs d'application Gérer les utilisateurs
Gérer les groupes
Fonctionnalités avancées Effectuer des actions en tant qu'utilisateur

Je pense à une contradiction, entre le fait de ne pas avoir de site, ou le config dans Box.


Merci

Eric
Membro registado
2.566 mensagems
Popularité : +222 (260 votes)
Publicado em junho, 23 2017 - 11:46 AM
Affiche ta page dans un champ html pour voir ce que ça dit.

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membro registado
28 mensagems
Publicado em junho, 23 2017 - 12:19 PM
Bonjour,

C'est mieux en visuel.
Error: redirect_uri_mismatch

Ci-dessous la capture du champ HTML






Merci

Eric
Membro registado
28 mensagems
Publicado em junho, 23 2017 - 12:47 PM
L'image n'est pas claire.

En gros le contenu des champs dans l'ordre

1
MON ID CLIENT
code
L'URI
root_readwrite manage_groups manage_app_users admin_on_behalf_of
vide
vide
b6e96f598dc443439457cf6ea16551ae
vide
1
login
vide
1
/api/oauth2/authorize?response_type=code&client_id=MON ID CLIENT&redirect_uri=https://www.xxxxxxxxxx.fr&state=b6e96f598dc443439457cf6ea16551ae
5990490bb0768c611882ae0d68cc80416ed8e9eacde455b36ca29d8ac26b1de5
vide


Merci

Eric
Membro registado
2.566 mensagems
Popularité : +222 (260 votes)
Publicado em junho, 23 2017 - 2:15 PM
Dans ton url, tu n'arrives sur aucune page ? (https://www.xxxxxxxxxx.fr)

Essaye en déployant une page simple page html du style page_oauth.html

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membro registado
28 mensagems
Publicado em junho, 23 2017 - 3:20 PM
Il n'y a pas de site dans l'histoire, le but est de faire du machine à machine, donc entre un serveur local type Windows server 2003 et Box.
Il en sera de même entre les téléphones et Box pour récupérer automatiquement le fichier, le tout sans interface, ni coté serveur ni coté téléphone.

Le serveur génère un fichier crypté une fois par jour, qu'il déposera sur Box (si j'y arrive un jour).
Les téléphones récupèrent une fois par jour le fichier.

C'est là le gros du problème. J'ai bien peur de devoir faire via un fichier de configuration JSON ou trouver autre chose que Box.

C'est pas gagné mon histoire.

En version interface, c'est claire qu'il faudrait un site avec une page.


Merci d'y avoir consacré un temps précieux. Les infos reçues sont très instructives sur la méthode.

Eric
Membro registado
2.566 mensagems
Popularité : +222 (260 votes)
Publicado em junho, 23 2017 - 4:07 PM
Je ne suis pas sur qu'ils intègrent la méthode server-side

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Membro registado
28 mensagems
Publicado em junho, 23 2017 - 5:11 PM
Cela semble faire partie de l'API.
Il vas falloir trouver le moyen de générer une clé public + une privée, et envoyer le fichier.

Si ça marche, je posterai cela.

Merci et bon WE