enc28J60 e Arduino (15)

luca 26 agosto 2013 6

Il tutorial di oggi nasce da una richiesta di Martin: realizzare uno sketch per accedere ad un’area protetta (con username e password) di un sito web.

Basic Authentication

Il metodo di autenticazione più semplice che il protocollo HTTP supporta è chiamato basic authentication.

Se proviamo ad accedere ad un’area sicura, il server risponderà alla nostra richiesta con il codice 401, indicando al browser la necessità di specificare nome utente e password validi. Normalmente in questo caso il browser mostrerà un messaggio chiedendoci di inserire i dati richiesti:

Nome utente e password vengono quindi uniti in un’unica stringa, separati da due punti (utente:password). La stringa viene quindi codificata in base64 ed inviata al server all’interno di un header HTTP:

Authorization: Basic stringa_base64

Se ad esempio il nostro nome utente è luca e la password è MyS3cr3t, possiamo utilizzare un convertitore online per trovare la codifica base64 da inserire nell’header:

Configurazione server

E’ necessario effettuare una configurazione lato server per attivare la basic authentication su una cartella del nostro sito. La maggior parte dei server web sono configurabili tramite files .htaccess salvati all’interno della cartella stessa.

Per prima cosa, dobbiamo preparare un file contenente gli utenti (e le relative password); questo file per convenzione si chiama .htpasswd. Utilizziamo uno strumento online per codificare i dati e inseriamo la stringa ottenuta all’interno del file .htpasswd; carichiamo infine questo file all’interno della cartella da proteggere:

Prepariamo ora il file .htaccess con il seguente contenuto:

AuthType Basic
AuthName "Secure folder"
AuthUserFile /htdocs/demo/secure/.htpasswd
Require valid-user

Con AuthType indichiamo la modalità (“basic”) di autenticazione, mentre con AuthName possiamo specificare un nome per l’area protetta.

Dobbiamo quindi specificare la posizione del file .htpasswd, indicando il suo path assoluto. Per conoscere questo percorso possiamo sfruttare un semplice script php.

Infine possiamo indicare di accettare qualsiasi utente presente nel file (“valid-user”) o, in alternativa, indicare il nome degli utenti validi (Require user username).

Anche il file .htaccess va caricato nella cartella da proteggere:

Arduino

Lo sketch completo è disponibile nel repository GitHub.

Viene definita come costante la stringa (già codificata in base64) di autenticazione:

char authorization[] PROGMEM = "bHVjYTpNeVMzY3Izdb==";

La richiesta (GET) al server web contiene anche l’header Authorization:

Stash::prepare(PSTR("GET /demo/secure/ HTTP/1.1" "\r\n"
    "Host: $F" "\r\n" 
    "Authorization: Basic $F" "\r\n"
    "\r\n"), website, authorization);

Viene quindi controllato se la risposta del server contiene il valore 401 (che indica una richiesta di autenticazione, quindi il rifiuto delle credenziali) o 200 (ok):

if(strstr(reply, "HTTP/1.1 401") != 0)
  Serial.println("Authorization required :(");
else if(strstr(reply, "HTTP/1.1 200") != 0)
  Serial.println("Access granted! :)");

Infine due screenshots dello sketch in azione…

 

6 Comments »

  1. sergio 28 agosto 2013 at 16:04 - Reply

    Hello Luca,
    congratulations for the site, I found a little time and has helped me a lot.

    Please, I am trying to develop a project with arduino + NIC enc20j60 (the dx.com) and wish I could change the ip address and salver in eeprom, all via the web.

    Something like this?

    thank you

    • luca 4 settembre 2013 at 13:38 - Reply

      Hi Sergio,

      I’m working on an example about it… stay tuned ;)

  2. Martin 4 settembre 2013 at 21:26 - Reply

    Hi Luca,
    great tutorial. Thanks a lot especially for the part with arduino code. I will test it soon as can be really helpfull in the projects.

  3. CristianMoi 2 dicembre 2013 at 13:18 - Reply

    Ciao Luca, innazitutto compilemti per questo splendido sito, volevo porti una domanda ho un problema con una scheda comprata tempo fa su eBay pensado fosse originale invece quando mi è arrivata ho visto che così non era… si tratta di una Arduino Ethernet Shield V1.1 marchiata posteriormente con la sigla FLAMINGO EDA (2009)… ovviamente provandola con la libreria standard per la Ethernet Standard… facendo una ricerca su internet ho scoperto che la libreria si trova a questo link:

    http://code.google.com/p/flamingoarduino/source/browse/trunk/hardware/libraries/Ethernet/?r=3

    oppure quì (credo sia il produttore):
    http://www.flamingoeda.com/2008/09/04/arduino-ethernet-%E7%BD%91%E7%BB%9C%E6%89%A9%E5%B1%95%E6%9D%BF/

    quando provo le librerie pero pare che ci sia qualche problema… perchè usando i stessi file d’esempio riportati nella cartella… solo compilando il sorgente genera subito degli errori come se non riuscisse ad utilizzare i file presenti nella libreria… puoi darmi una mano? hai per caso delle librerie aggiornate per questo hardware? perchè presumo che questa libreria sia obsoleta e probabilmente mi da questo problema…

    • luca 2 dicembre 2013 at 13:54 - Reply

      Ciao Cristian,

      hai provato ad usare la libreria dei miei tutorial? Dovrebbe essere compatibile… la libreria che linki tu è molto vecchia, probabilmente non è compatibile con l’IDE 1.0.

  4. Consumer48 30 marzo 2014 at 15:51 - Reply

    Hey! Just wanted to give you a thumbs up, and say that your tutorials are some of the best ones out there! Great job, keep it up & many thanks!!

Leave A Response »