Premiers pas
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);
}
}