Authentification et autorisation d’un appareil Tessel avec Auth0
Tessel est une carte étonnante. Non seulement elle a une excellente spécification matérielle et une grande histoire d’extensibilité, mais vous pouvez la programmer en Javascript! Lorsqu’elle a été annoncée sur Kickstarter, nous l’avons immédiatement soutenue et avons attendu de longues semaines pour nous en procurer une.

Elle est enfin arrivée et nous avons pu écrire notre premier programme : obtenir un jeton d’Auth0 et appeler une API.
Tessel vise une compatibilité totale avec Javascript. La plupart des modules Node de base fonctionnent également, mais pas tous. Consultez la documentation de Tessel sur Github pour plus de détails.
L’exemple
Cet exemple est simple :
Nous appelons le point de terminaison du Propriétaire de la ressource sur Auth0 avec les informations d’identification de l’appareil
Nous obtenons un jeton en retour
Nous utilisons le jeton pour appeler une API

var http = require('https');
var tessel = require('tessel');
tessel.syncClock(function () {
var device_id = 'tessel-01';
var password = 'THE TESSEL PASSWORD';
authenticate(device_id, password, function(e,token){
if(e) return console.log("Error:" + e);
getDeviceProfile(token.access_token, function(e, profile){
console.log("Device profile:");
console.log(profile);
});
});
function getDeviceProfile(token, done){
request('{yourDomain}',
'/userinfo',
'GET',
{
"Content-type": "application/json",
"Authorization": "Bearer " + token
},
null,
function(e,response){
if(e) return done(e);
done(null, JSON.parse(response));
});
}
function authenticate(device_id, password, done)
{
request('{yourDomain}',
'/oauth/ro',
'POST',
{
"Content-type": "application/json",
},
JSON.stringify({
client_id: '{yourClientId}',
username: device_id,
password: password,
connection: 'devices',
grant_type: "password",
scope: 'openid'
}),
function(e,response){
if(e) return done(e);
done(null, JSON.parse(response));
});
}
function request(host, path, method, headers, body, done){
var options = {
hostname: host,
path: path,
method: method,
headers: headers
};
var req = http.request(options, function(res) {
res.setEncoding('utf8');
var response = "";
res.on('data', function (chunk) {
response += chunk;
});
res.on('end', function(){
done(null, response);
});
});
req.on('error', function(e) {
done(e);
});
if( body ) req.write(body);
req.end();
}
});
Was this helpful?
Points forts du code à noter :
Ce code est compatible à 99 % avec Node (le seul module spécifique à l’appareil est
tessel
, que nous utilisons uniquement pour nous assurer que tous les appels SSL sont effectués avec des références temporelles adéquates.La fonction
requête
est un simple « wrapper » sur les fonctions du modulehttp
. Le modulerequête
ne fonctionne pas actuellement dans Tessel.
Le point de terminaison Resource Owner (Propriétaire de la ressource) nécessite des informations d’identification (telles que le nom d’utilisateur et le mot de passe), de sorte que le magasin d’utilisateurs du système dorsal connecté à Auth0 doit prendre en charge ces informations (comme une connexion à une base de données ou à Entra ID).
Configuration Tessel
Exécutez
tessel update
pour vous assurer que vous installez le dernier micrologiciel avec le support SSL.Vous aurez évidemment besoin d’une connexion au web. Vous pouvez configurer le WiFi avec la commande
tessel wifi
.Envoyez toujours les informations d’identification (telles que
nom d’utilisateur
/mot de passe
) sur des réseaux sécurisés.
Résumé
Tessel est génial. Nous voyons beaucoup de potentiel. Cet exemple montre à quel point il est facile de le connecter avec Auth0.