Vai al contenuto principale

Autorizzare una richiesta

Lo scopo di questo documento è mostrarti come modificare le richieste HTTP per inviare richieste autorizzate alla X API. Tutte le API di X si basano sul protocollo HTTP. Ciò significa che qualsiasi software tu scriva che utilizza le API di X invia una serie di messaggi strutturati ai server di X. Ad esempio, una richiesta per pubblicare il testo “Hello Ladies + Gentlemen, a signed OAuth request!” come Tweet avrà un aspetto simile al seguente:
POST /1.1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Content-Length: 76
Host: api.x.com

status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21
Qualsiasi libreria HTTP dovrebbe essere in grado di generare e inviare la richiesta sopra con un livello minimo di difficoltà. Tuttavia, la richiesta sopra è considerata non valida, poiché non c’è modo di sapere:
  1. Quale applicazione sta effettuando la richiesta
  2. Per conto di quale utente la richiesta sta pubblicando
  3. Se l’utente ha concesso all’applicazione l’autorizzazione a pubblicare per suo conto
  4. Se la richiesta è stata manomessa da terzi durante il transito
Per consentire alle applicazioni di fornire queste informazioni, l’API di X si basa sul protocollo OAuth 1.0a. In termini molto semplificati, l’implementazione di X richiede che le richieste che necessitano di autorizzazione contengano un’intestazione HTTP Authorization aggiuntiva con informazioni sufficienti a rispondere alle domande elencate sopra. Una versione della richiesta HTTP mostrata sopra, modificata per includere questa intestazione, è la seguente (normalmente l’intestazione Authorization dovrebbe stare su una sola riga, ma qui è stata spezzata per leggibilità):
POST /1.1/statuses/update.json?include_entities=true HTTP/1.1
Accept: */*
Connection: close
User-Agent: OAuth gem v0.4.4
Content-Type: application/x-www-form-urlencoded
Authorization:
OAuth oauth\_consumer\_key="xvz1evFS4wEEPTGEFPHBog",
oauth_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg",
oauth_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D",
oauth\_signature\_method="HMAC-SHA1",
oauth_timestamp="1318622958",
oauth_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb",
oauth_version="1.0"
Content-Length: 76
Host: api.x.com

status=Hello%20Ladies%20%2b%20Gentlemen%2c%20a%20signed%20OAuth%20request%21
Quando questa richiesta è stata creata, sarebbe stata accettata dalla X API come valida. Se questo processo di firma sembra andare oltre l’ambito della tua integrazione, prendi in considerazione l’uso dei Web Intents, che non richiedono l’utilizzo di OAuth per interagire con la X API.   Raccolta dei parametri Dovresti notare che l’header contiene 7 coppie chiave/valore, in cui tutte le chiavi iniziano con la stringa “oauth_”. Per qualsiasi richiesta alla X API, raccogliere questi 7 valori e creare un header analogo ti consentirà di specificare l’autorizzazione per la richiesta. Come è stato generato ciascun valore è descritto di seguito: Consumer key La oauth_consumer_key identifica quale applicazione sta effettuando la richiesta. Recupera questo valore dalla pagina delle impostazioni della tua X App nel developer portal.
oauth_consumer_keyxvz1evFS4wEEPTGEFPHBog
Nonce Il parametro oauth_nonce è un token univoco che la tua applicazione dovrebbe generare per ogni richiesta. X utilizzerà questo valore per determinare se una richiesta è stata inviata più volte. Il valore per questa richiesta è stato generato codificando in base64 32 byte di dati casuali e rimuovendo tutti i caratteri non alfanumerici; qualsiasi approccio che produca una stringa alfanumerica sufficientemente casuale va bene.
oauth_noncekYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg
Firma Il parametro oauth_signature contiene un valore generato applicando un algoritmo di firma a tutti gli altri parametri della richiesta e a due valori segreti. La firma consente a X di verificare che la richiesta non sia stata modificata durante la trasmissione, di verificare l’applicazione che la invia e di confermare che l’applicazione sia autorizzata a interagire con l’account dell’utente. Il processo per calcolare l’oauth_signature per questa richiesta è descritto in Creating a signature.
oauth_signaturetnnArxj06cWHq44gCs1OSKk/jLY=
Metodo di firma Il parametro oauth_signature_method utilizzato da X è HMAC-SHA1. Questo valore deve essere utilizzato per qualsiasi richiesta autorizzata inviata alla X API.
oauth_signature_methodHMAC-SHA1
Timestamp Il parametro oauth_timestamp indica quando è stata creata la richiesta. Questo valore deve essere il numero di secondi trascorsi dall’epoca Unix al momento in cui la richiesta viene generata e dovrebbe essere facilmente ottenibile nella maggior parte dei linguaggi di programmazione. X rifiuterà le richieste create troppo tempo prima, quindi è importante mantenere l’orologio del computer che genera le richieste sincronizzato con NTP.
oauth_timestamp1318622958
Token Il parametro oauth_token in genere rappresenta il consenso di un utente a condividere l’accesso al proprio account con la tua applicazione. Esistono alcune richieste di autenticazione in cui questo valore non viene passato o assume una forma diversa di token, ma tali casi sono trattati in dettaglio in Obtaining access tokens. Per la maggior parte delle richieste generiche, utilizzerai quello che viene definito un access token. Puoi generare un access token valido per il tuo account nella pagina delle impostazioni della tua X App nel developer portal.
oauth_token370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb
Versione Il parametro oauth_version deve essere sempre 1.0 per qualsiasi richiesta inviata alla X API.
oauth_version1.0

Creazione della stringa dell’header

Per creare la stringa dell’header, immagina di scrivere in una stringa chiamata DST.
  1. Aggiungi la stringa “OAuth ” (incluso lo spazio finale) a DST.
  2. Per ogni coppia chiave/valore dei 7 parametri elencati sopra:
    1. Codifica in percent-encoding la chiave e aggiungila a DST.
    2. Aggiungi il carattere di uguale ‘=’ a DST.
    3. Aggiungi un doppio apice ‘”’ a DST.
    4. Codifica in percent-encoding il valore e aggiungilo a DST.
    5. Aggiungi un doppio apice ‘”’ a DST.
    6. Se restano coppie chiave/valore, aggiungi una virgola ‘,’ e uno spazio ‘ ’ a DST.
Presta particolare attenzione al percent-encoding dei valori durante la creazione di questa stringa. Ad esempio, il valore di oauth_signature tnnArxj06cWHq44gCs1OSKk/jLY= deve essere codificato come tnnArxj06cWHq44gCs1OSKk%2FjLY%3D. L’esecuzione di questi passaggi sui parametri raccolti sopra produce la seguente stringa:
OAuth oauth\_consumer\_key="xvz1evFS4wEEPTGEFPHBog", oauth\_nonce="kYjzVBB8Y0ZFabxSWbWovY3uYSQ2pTgmZeNu2VS4cg", oauth\_signature="tnnArxj06cWHq44gCs1OSKk%2FjLY%3D", oauth\_signature\_method="HMAC-SHA1", oauth\_timestamp="1318622958", oauth\_token="370773112-GmHxMAgYyLbNEtIKZeRNFsMKPR9EyMZeS9weJAEb", oauth_version="1.0"
Questo valore deve essere impostato come intestazione Authorization della richiesta.
I