Vai al contenuto principale

OAuth Echo

OAuth Echo è un metodo per delegare in modo sicuro l’autorizzazione OAuth a una terza parte durante l’interazione con un’API. Ci sono quattro parti coinvolte in questa interazione:
  • l’Utente che utilizza X tramite una specifica App X autorizzata
  • il Consumer, ovvero l’App X che sta tentando di interagire con il provider di media di terze parti (ad es. il sito di condivisione di foto)
  • il Delegator, ovvero il provider di media di terze parti
  • il Service Provider, cioè X stesso  
In sostanza, prepara una richiesta che il delegante invierà alla X API per conto di un’App e di un utente. Inserisci quella che altrimenti sarebbe una richiesta OAuth firmata in un’intestazione HTTP e chiedi al delegante di inviare tale richiesta a X dopo aver completato l’operazione intermediaria. Ecco un esempio: l’Utente vuole caricare una foto. Il Consumer effettuerà la chiamata di upload al Delegator con un POST. Il POST dovrebbe contenere l’immagine, ma anche due elementi aggiuntivi come intestazioni HTTP:
  • x-auth-service-provider — in pratica, è il “realm” a cui inviare la delega di identità — nel caso di X, impostalo su https://api.x.com/1.1/account/verify_credentials.json. Le integrazioni con X basate su iOS5 aggiungeranno un parametro aggiuntivo application_id a questo URL, che sarà utilizzato anche per calcolare l’oauth_signature usata in x-verify-credentials-authorization.
  • x-verify-credentials-authorization — il Consumer deve creare tutti i parametri OAuth necessari per poter chiamare https://api.x.com/1.1/account/verify_credentials.json usando OAuth nell’intestazione HTTP (ad es. dovrebbe apparire come OAuth oauth_consumer_key=”…”, oauth_token=”…”, oauth_signature_method=”…”, oauth_signature=”…”, oauth_timestamp=”…”, oauth_nonce=”…”, oauth_version=”…”).  
Tieni presente che l’intera transazione deve avvenire entro un intervallo di tempo in cui oauth_timestamp sia ancora valido. In alternativa, invece di inviare questi due parametri nell’intestazione, possono essere inviati nel POST come x_auth_service_provider e x_verify_credentials_authorization — in tal caso, ricorda di eseguire l’escape e di includere i parametri nella base string della firma OAuth — in modo analogo alla codifica dei parametri in qualsiasi richiesta. È preferibile usare le intestazioni HTTP per mantenere le operazioni il più separate possibile. L’obiettivo del Delegator, a questo punto, è verificare che l’Utente sia chi dichiara di essere prima di salvare i contenuti multimediali. Una volta che il Delegator riceve tutti i dati sopra tramite il suo metodo di upload, dovrebbe archiviare temporaneamente l’immagine e quindi effettuare una chiamata all’endpoint specificato nell’intestazione x-auth-service-provider — in questo caso, https://api.x.com/1.1/account/verify_credentials.json — usando la stessa intestazione di autenticazione OAuth fornita dal Consumer nell’intestazione x-verify-credentials-authorization.  

Best practice per OAuth Echo

Usa l’URL fornito da x-auth-service-provider per effettuare il lookup, non un valore hard-coded. Apple iOS, ad esempio, aggiunge un parametro aggiuntivo application_id a tutte le richieste OAuth, e la sua presenza deve essere mantenuta in ogni fase di OAuth Echo. Per la parte di autorizzazione OAuth, prendi il valore dell’intestazione x-verify-credentials-authorization e inseriscilo in un’intestazione Authorization separata per la chiamata al service provider. Per maggiore scrupolo, verifica che il valore in x-auth-service-provider sia quello atteso.
  • Se il Service Provider restituisce un HTTP 200, bene. Il Delegator dovrebbe archiviare in modo permanente l’immagine, generare un URL e restituirlo.
  • Se il Service Provider non restituisce un HTTP 200, scarta l’immagine e restituisci un errore al Consumer.
I