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.

Tessel - Tessel Ports Diagram

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 :

  1. Nous appelons le point de terminaison du Propriétaire de la ressource sur Auth0 avec les informations d’identification de l’appareil

  2. Nous obtenons un jeton en retour

  3. Nous utilisons le jeton pour appeler une API

Tessel - Tessel to Auth0 Flow Diagram

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 :

  1. 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.

  2. La fonction requête est un simple « wrapper » sur les fonctions du module http. Le module requê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.