Eerste stappen
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);
}
}