Spotify Play Button è una feature di spotify che permette agli sviluppatori di integrare nelle proprie applicazioni web un bottone per controllare il player dalle pagine web, e di riprodurre le canzoni proposte.
Il problema con questi controlli integrati nelle pagine web è piuttosto ovvio.
I controlli web sfruttano il fatto che ogni client Spotify installato sul computer espone un server web! Che sia Premium o non, non c’è modo di disattivarlo.
Spotify possiede il dominio spotilocal.com. Questo dominio semplicemente punta a 127.0.0.1 o localhost. Questo significa che hanno un modo infallibile di inviare richieste web alla macchina locale. Ed è il webserver contenuto dentro Spotify a gestire queste richieste.

spotify-local

Ci sono una serie di trucchi per inviare richieste dal browser al client spotify (hijacking). La stragrande maggioranza di browser permette solo una connessione per volta verso il server, il che significa che ci può essere un singolo controller spotify per pagina. Per bypassare questo limite i controlli in realtà si connettono a diversi sottodomini di spotilocal.com. Che sembrano essere generati random, al volo, con un algoritmo che limita le collisioni. Ciò che rimane da sapere adesso, è la porta su cui Spotify rimane in ascolto sul PC locale.
Spotify non può usare la stessa porta su ogni computer, perchè a seconda delle altre applicazioni che ci girano quest’ultima potrebbe non esser sempre libera. Quindi piuttosto che hardcodare una porta, spotify nè sceglie una da un range prestabilito.

Adesso i controlli web possono comunicare col client spotify, usando richieste HTTP. Tuttavia, se bastasse solo questo, il loro sistema sarebbe insicuro e chiunque potrebbe inviare richieste e giocare con il nostro Spotify. Probabilmente non una grande mossa per il loro business. Motivo per cui hanno introdotto protezioni contro CSRF e l’OAUTH.
Spotify fornisce un semplice endpoint sul server web locale per richiedere un token csrf (Quest’ultimo è: /simplecsrf/token.json) e uno per il token oauth (http://open.spotify.com/token). Questo dalla versione v0.9.
Il token oauth si può ottenere facilmente con una richiesta CURL:

curl-oauth-spotify

E’ facile con Node.js o altri linguaggi di scripting, realizzare uno script in grado di effettuare le dovute richieste e ottenere i token CSRF e OAUTH..

request-nodejs-spotify

Ottenuti i token si può dunque implementare il controller web Spotify:

spotify-web-controls

Conclusioni

1. Spotify usa un server web locale per gestire le richieste del browser.
2. Il server viene reso sicuro con CSRF e OAUTH che non si può ingannare da browser.
3. Ma si può ingannare al di fuori di un browser (CURL).
4. E’ possibile inviare delle richieste per controllare Spotify dopo aver stabilito la connessione.

La speranza è che questo possa aiutare a scrivere web-app più efficaci, senza ricorrere a simulatori di click o altri stratagemmi per controllare spotify da browser.