Authentification

La procédure d'authentification diffère selon si vous souhaitez lire ou éditer des contenus

Authentification en lecture

L'authentification en lecture se fait en ajoutant un paramètre key à toutes vos requêtes: soit en la plaçant dans la query (`?key=votreclé`) soit dans un paramètre key en entête (header) de votre requête.

L'authentification décrite dans la section "Authentification en écriture" est également acceptée pour les opérations de lecture.

Votre clé d'accès en lecture est disponible dans le segment Clés API de la page de paramétrage de votre compte (https://openagenda.com/settings/apiKey), accessible depuis votre onglet de profil dans l'entête de toute page sur OpenAgenda.

Un exemple:

https://api.openagenda.com/v2/agendas/{agendaUID}/events?key={VOTRECLE}&lang=fr

Authentification en écriture

La procédure d'authentification à suivre pour éditer du contenu sur OpenAgenda consiste à utiliser votre clé secrète pour récupérer un token d'accès qui vous servira pendant toute votre session. Celui-ci a une durée de vie limitée.

Votre clé secrète sera mise à disposition sur votre compte OA sur demande à support@openagenda.com

Une fois activée, la clé est disponible dans la section Clés API de la page de paramétrage de votre compte: https://openagenda.com/settings/apiKey

Dès que vous avez la clé, postez la sur: https://api.openagenda.com/v2/requestAccessToken

Precisez votre clé dans une variable 'code' et fixez la valeur 'grant_type' en face d'un champ 'authorization_code', les deux en corps de requête. Vous recevrez alors dans la réponse votre token d'accès et une indication sur sa durée de vie en secondes ( respectivement sous les noms access_token et expires_in )

Une fois le token en main, passez-le soit dans le body de vos requêtes avec un nonce sous les clé `access_token` et `nonce`, soit dans le header sous les clés `access-token` et `nonce`.

A noter: l'opération de suppression étant un `delete`, seuls l'authentification par token passé dans le header est possible.

Exemples

php - curl

Dans l'exemple suivant, les données d'authentification sont passées en corps de requête.

$ch = curl_init('https://api.openagenda.com/v2/requestAccessToken'); 
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, array(
  'grant_type' => 'authorization_code',
  'code' => '--yoursecretgoeshere--'
));

$received_content = curl_exec($ch);
        
if (curl_getinfo($ch, CURLINFO_HTTP_CODE) == 200) {
  $data = json_decode($received_content, true);
  $accessToken = $data['access_token'];
}

php - Guzzle

$client = new GuzzleHttp\Client();
$res = 'https://api.openagenda.com/v2/requestAccessToken';

$response = $client->post($res, [
  'multipart' => [
    [
      'name' => 'grant_type',
      'contents' => 'authorization_code'
    ],
    [
      'name' => 'code',
      'contents' => 'secret_key'
    ],
  ]
]);

$content = json_decode($response->getBody()->getContents());

$accessToken = $content['access_token'];

node.js

const https = require('https');
const querystring = require('querystring');


const post_data = querystring.stringify({
  'grant-type' : 'authorization_code',
  'code': '--yoursecretgoeshere--',
});

const options = {
  host: 'api.openagenda.com',
  path: '/v2/requestAccessToken',
  method: 'POST',
  headers: {
    'Content-Type': 'application/json',
    'Content-Length': post_data.length
  }
};

const request = https.request(options, function (response) {
  let str = '';

  response.on('data', function (chunk) { str += chunk; });
  response.on('end', function () {
    if (response.statusCode == 200) {
      const access_token = JSON.parse(str).access_token;
      console.log(access_token);
    }
  });
});

request.write(post_data);
request.end();