Articles dans cette section

Premiers pas

Publié:

OAuth2

L’API everHome utilise OAuth2 pour l’authentification.
Créez d’abord une application OAuth2 sous Mes applications.
Conservez en lieu sûr le Client ID et le Client Secret.

HTTP

Toutes les requêtes HTTP envoyées à l’API everHome doivent être autorisées à l’aide du jeton généré par OAuth2.
Le jeton actuel doit être inclus dans l’en-tête HTTP.

GET https://everhome.cloud/device HTTP/1.1
Authorization: Bearer $TOKEN

Les paramètres du corps sont transmis au format JSON.

POST https://everhome.cloud/device/56/execute HTTP/1.1
Authorization: Bearer $TOKEN
Content-Type: application/json
\n
{
"action": "on"
}

Exemple de connexion OAuth2

export CLIENT_ID="Votre Client ID"
export CLIENT_SECRET="Votre Client Secret"
const app = require('express')();
const { AuthorizationCode } = require('simple-oauth2');

const port = 3000;

const createApplication = (cb) => {
  const callbackUrl = 'http://localhost:3000/callback';

  app.listen(port, (err) => {
    if (err) return console.error(err);

    console.log(`http://localhost:${port}`);

    return cb({
      app,
      callbackUrl,
    });
  });
};

createApplication(({ app, callbackUrl }) => {
  const client = new AuthorizationCode({
    client: {
      id: process.env.CLIENT_ID,
      secret: process.env.CLIENT_SECRET,
    },
    auth: {
      tokenHost: 'https://everhome.cloud',
      authorizeHost: 'https://everhome.cloud',
      tokenPath: '/oauth2/token',
      authorizePath: '/oauth2/authorize',
    },
    http: {
      json: 'force',
      headers: {
        accept: "text/html"
      }
    },
    options: {
      authorizationMethod: 'body',
    },
  });

  const authorizationUri = client.authorizeURL({
    redirect_uri: callbackUrl,
    state: '3',
  });

  // Appelle la page OAuth2 everHome
  app.get('/auth', (req, res) => {
    console.log(authorizationUri);
    res.redirect(authorizationUri);
  });

  // Intercepte la réponse de la page OAuth2
  app.get('/callback', async (req, res) => {
    const { code } = req.query;
    const options = {
      code,
      redirect_uri: callbackUrl,
    };

    try {
      const accessToken = await client.getToken(options);

      console.log('Votre token everHome : ', accessToken.token);

      persistToken(accessToken.token); // enregistrer le token

      return res.status(200).json(accessToken.token);
    } catch (error) {
      console.error('Erreur d\'accès au token', error.message);
      return res.status(500).json('Échec de l\'authentification');
    }
  });

  app.get('/', (req, res) => {
    res.send('<a href="/auth">Connexion</a>');
  });
});

Renouvellement du token OAuth2

Le token OAuth2 obtenu expire pour des raisons de sécurité au bout d'un certain temps.
Vérifiez donc avant chaque requête HTTP que le token à utiliser est toujours valide.

const accessTokenJSONString = loadTokenFromStorage();
let accessToken = client.createToken(JSON.parse(accessTokenJSONString));
if (accessToken.expired(30)) {
    try {
      accessToken = await accessToken.refresh();
    } catch (error) {
      console.log('Erreur lors du rafraîchissement du token d\'accès : ', error.message);
    }
}
Accès refusé
Accès refusé