Beiträge in diesem Abschnitt

Erste Schritte

Veröffentlicht:

OAuth2

Die everHome API verwendet OAuth2 zur Authentifizierung.
Lege zunächst unter Meine Anwendungen eine OAuth2 Anwendung an.
Bewahre die Client ID und den Client Secret sicher auf.

HTTP

Alle HTTP Requests die an die everHome API gesendet werden müssen mithilfe des durch OAuth2 erzeugten Tokens autorisiert werden.
Hierfür muss das aktuelle Token im HTTP-Header mitgegeben werden.

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

Body parameter werden mittels Json übergeben.

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

OAuth2 Login Beispiel

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

 // Ruft everHome OAuth2 Seite auf
 app.get('/auth', (req, res) => {
   console.log(authorizationUri);
   res.redirect(authorizationUri);
 });

 // Fängt Antwort der OAuth2 Seite ab
 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('Dein everHome Token: ', accessToken.token);

     persistToken(accessToken.token); // token speichern

     return res.status(200).json(accessToken.token);
   } catch (error) {
     console.error('Access Token Error', error.message);
     return res.status(500).json('Authentication failed');
   }
 });

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

OAuth2 Token erneuern

Das erhaltene OAuth2 Token läuft aus Sicherheitsgründen nach einer gewissen Zeit ab.
Prüfe daher vor jedem HTTP-Request, ob das zu verwendende Token noch gültig ist.

const accessTokenJSONString = loadTokenFromStorage();
let accessToken = client.createToken(JSON.parse(accessTokenJSONString));
if (accessToken.expired(30)) {
   try {
     accessToken = await accessToken.refresh();
   } catch (error) {
     console.log('Error refreshing access token: ', error.message);
   }
} 
Zugriff abgelehnt
Zugriff abgelehnt