Artikelen in deze sectie

Eerste stappen

Gepubliceerd:

OAuth2

De everHome API maakt gebruik van OAuth2 voor authenticatie.
Maak eerst onder Mijn applicaties een OAuth2-applicatie aan.
Bewaar de Client ID en de Client Secret veilig.

HTTP

Alle HTTP-verzoeken die naar de everHome API worden gestuurd, moeten geautoriseerd zijn met behulp van het door OAuth2 gegenereerde token.
Hiervoor moet het actuele token in de HTTP-header worden meegegeven.

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

Body-parameters worden via JSON doorgegeven.

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

OAuth2 Login Voorbeeld

export CLIENT_ID="Jouw Client ID"
export CLIENT_SECRET="Jouw 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',
  });

  // Roept de everHome OAuth2-pagina op
  app.get('/auth', (req, res) => {
    console.log(authorizationUri);
    res.redirect(authorizationUri);
  });

  // Vangt het antwoord van de OAuth2-pagina op
  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('Jouw everHome-token: ', accessToken.token);

      persistToken(accessToken.token); // token opslaan

      return res.status(200).json(accessToken.token);
    } catch (error) {
      console.error('Fout bij ophalen access token', error.message);
      return res.status(500).json('Authenticatie mislukt');
    }
  });

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

OAuth2 Token vernieuwen

Het ontvangen OAuth2-token verloopt om veiligheidsredenen na enige tijd.
Controleer daarom vóór elk HTTP-verzoek of het te gebruiken token nog geldig is.

const accessTokenJSONString = loadTokenFromStorage();
let accessToken = client.createToken(JSON.parse(accessTokenJSONString));
if (accessToken.expired(30)) {
    try {
      accessToken = await accessToken.refresh();
    } catch (error) {
      console.log('Fout bij verversen access token: ', error.message);
    }
} 
Toegang geweigerd
Toegang geweigerd