Comment se procurer une clé client pour l'API?


#1

Hello !

Je voulais savoir comment je pouvais me procurer une clé client pour l’API de Cozy.
Et oui! j’ai l’intention de faire une app pour Cozy :tada:!

Cordialement JulesMichael


#2

Salut @JulesMichael,

Qu’est-ce que tu appelles une clé d’API ?
Quel type d’application veux-tu développer ? Une application Web à installer dans Cozy ? Dans ce cas, ton application recevra automatiquement un jeton lui permettant d’interagir avec l’API. Je t’invite à consulter notre brouillon de documentation pour développer des applications pour le nouveau Cozy. Ou tu veux développer une application tierce, qui ne s’exécutera pas dans Cozy ? Dans ce cas, il faudra passer par OAuth.
Décris-nous un peu plus précisément ce que tu veux faire, qu’on puisse te guider au mieux :smile:


#3

Ha oui pardon il manque pas mal d’éléments dans ma question :grin:.

En fait je souhait faire une application tierce utilisant l’OAuth 2. Son concept est encore un peu secret :stuck_out_tongue: . Mais en gros, elle se résume à un accès aux fichiers. Mais pour cela, j’ai cru comprendre qu’il me fallait un client_id d’enregistré.

Le client doit être enregistré

Ma question est donc: Comment puis-je me procurer un client-id pour mon instance ?


#4

Hello,

Je t’invite à lire la documentation sur l’utilisation de OAuth pour permettre à des applications tierces d’interagir avec Cozy.

En particulier, l’appel POST /auth/register qui permet à ton application d’obtenir un jeton d’authentification, et ce paragraphe expliquant comment une application locale peut récupérer le jeton (elle doit faire tourner un serveur Web).

Et si tu as des questions, n’hésite surtout pas :smile:


#5

Hey!

Merci, tout fonctionne à merveille !
Du coup peut être que je vais vous faire un client python pour l’API ^^ . Ca me facilitera aussi mon travail :stuck_out_tongue:


#6

@JulesMichael Merci, c’est une excellente nouvelle :grinning:

N’hésite pas à nous solliciter si tu as besoin d’aide !


#7

Bonsoir @JulesMichael
Deux ans après la guerre, certes, mais la question mérite tout de même d’être posée : un client python pour l’API a-t-il finalement vu le jour ? Même sous forme embryonnaire ? une piste ?

A plousse


#8

Bonsoir @xxxelixxx,

Bienvenue à bord :smile:

Pas à ma connaissance.
Je peux éventuellement te fournir un exemple d’obtention d’un jeton en bash + curl, mais je ne crois pas que nous ayons d’exemple en Python.


#9

Allez pourquoi pas!

bon week-end


#10
curl -s -X POST -H "Host: ${server}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json"
  -d '{"redirect_uris": ["http://localhost:8080"],"client_name": "cozycli","software_id": "cozycli"}' \
  https://${server}/auth/register | jq ".server=\"${server}\"" > registration.json
url="$(curl -s -L -w "%{url_effective}" -o /dev/null "https://${server}/auth/authorize?client_id=$(jq -r '.client_id' registration.json)&response_type=code&scope=io.cozy.files:GET&state=$(cat /proc/sys/kernel/random/uuid)&redirect_uri=http%3A%2F%2Flocalhost:8080")"
echo "Open this URL in your browser: ${url}"
answer=$(mktemp)
nc -l -p 8080 -q 1 -c 'while read -r request remaining;do echo $request $remaining >> '${answer}';if [ "$remaining" = "" ];then break;fi;done;echo "HTTP/1.1 200 OK\n\nOK"';
IFS=";" read -r code state2<<< $(sed -E "s/^.*&code=([^&]*)&state=(.*) .*$/\1;\2/" "$answer")
rm -f $answer
curl -s -o token.json -X POST \
  -H "Host: ${server}" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -H "Accept: application/json" \
  -d "grant_type=authorization_code&code=${code}&client_id=$(jq -r '.client_id' registration.json)&client_secret=$(jq -r '.client_secret' registration.json)" https://${server}/auth/access_token

On fait une première requête pour demander un jeton au serveur, en donnant le nom de l’application, les permissions dont elle a besoin (ici io.cozy.files:GET : droit d’accès aux fichiers) et l’adresse que le serveur va contacter (localhost:8080, il va donc falloir qu’on fasse tourner un serveur http sur le port 8080 pour récupérer le jeton).
Le serveur répond avec un URL. Ouvrir cette URL dans son navigateur, autoriser l’application. Le navigateur va alors se connecter au serveur local et lui envoyer un code. Il reste à envoyer une dernière requête au serveur avec ce code pour récupérer un jeton qui devra ensuite être utilisé dans toutes les requêtes au serveur : -H "Authorization: Bearer ${token}"

Réponse rapide et peu claire, n’hésite pas à me relancer.

Tu trouveras une documentation plus complète ici https://github.com/cozy/cozy-stack/blob/master/docs/auth.md#post-authregister