Perché YouTube, o qualsiasi altro servizio Google, utilizza l'account con chiave di autorizzazione associata nell'URL?

6

in passato ho espirato con gli strumenti API disponibili di Google, come Drive e Youtube api.

Il modo in cui funziona è dopo aver acquistato un account deveopler, sei concesso a molti servizi Google tramite API, che per poter utilizzare, hai bisogno di una chiave api uniuqe che è collegata al tuo account e aggiunta a ciascuno di l'URL delle richieste.

Ad esempio:

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=some.playlist.id&key={YOUR_API_KEY}

All'inizio pensavo che fosse una buona idea usare la chiave - > l'associazione degli account, ad esempio, se una chiave API ignora le offerte, Google può semplicemente vietare l'account.

Ma poi ho scoperto che è molto semplice eseguire il reverse engineering del codice di autorizzazione nelle app Android / iOS utilizzando strumenti MITM come Mitmproxy. Utilizzando questo approccio, sono riuscito a trovare la app ufficiale di YouTube chiave di API e molte altre app che utilizzano tali servizi, quindi la mia domanda è, non è che Google si spari da solo usando il tasto di autorizzazione quel modo? Poiché le app possono rimanere anonime usando i loro servizi, e persino fingere di essere altri account! .

Non è un'idea migliore creare sdk che riceverà la chiave dell'account e usarla per generare localmente una chiave unica per ogni richiesta? Ovviamente anche questo potrebbe essere decodificato, ma sarà molto più difficile ...

    
posta Nadav96 10.03.2017 - 21:29
fonte

3 risposte

1

Se ti trovi nel piano premium , puoi ottenere un ID cliente di Google, che viene fornito con il tuo privato chiave.

After you sign up for the Google Maps APIs Premium Plan, you'll receive a Welcome letter from Google at the contact email address you provided. Your Welcome letter contains the following important information, so make sure you keep it handy:

  • Project ID
  • Client ID
  • Private cryptographic key for your client ID
  • Google Account

Authentication and authorization

To make requests to our APIs, you must authenticate your application with either an API key or your client ID. In addition, requests for some APIs also require digital signatures.

Ma devi essere premium:)

    
risposta data 10.03.2017 - 22:10
fonte
1

Dal link :

The API supports API keys and OAuth 2.0 credentials. Create whichever credentials are appropriate for your project:

  1. OAuth 2.0: Your application must send an OAuth 2.0 token with any request that accesses private user data. Your application sends a client ID and, possibly, a client secret to obtain a token. You can generate OAuth 2.0 credentials for web applications, service accounts, or installed applications. See the Creating OAuth 2.0 credentials section for more information.

  2. API keys: A request that does not provide an OAuth 2.0 token must send an API key. The key identifies your project and provides API access, quota, and reports. See the Creating API Keys section for information about creating an API key

Quello che vedi è una chiave OAuth 2.0, che è legata all'account dell'utente individuale e può essere utilizzata per accedere ai dati degli utenti privati; o una chiave API, che non può essere utilizzata per accedere ai dati degli utenti privati, ma solo per la quota / limitazione della velocità e la segnalazione.

Inoltre, ci sono quattro tipi di chiavi API:

  • Chiavi server: utilizzate questo server su un server, non distribuite questa chiave con l'applicazione
  • Chiavi del browser: Google verifica l'utilizzo di questo tipo di token contro l'intestazione Referer / Origin
  • Chiavi iOS e tasti Android: Google verifica l'utilizzo di questo tipo di token rispetto agli identificatori dell'applicazione

MITMing di una chiave OAuth 2.0 ti consente solo di accedere ai tuoi dati, quindi non è molto utile, mentre MITMing di una chiave API non ti consente di accedere ai dati dell'utente, quindi non è nemmeno molto utile. L'unica cosa che puoi fare con MITMing una chiave API è un'interruzione mirata della tua applicazione aumentando la quota della tua chiave o distorcendo il rapporto sull'utilizzo della tua applicazione. Questi sono, ovviamente, problemi, ma non è qualcosa che può essere evitato se la tua applicazione chiama l'API di YouTube direttamente sul lato client.

    
risposta data 11.03.2017 - 00:12
fonte
0

Le app dovrebbero avere gli stessi problemi delle app Web e nelle app Web, risolviamo questo problema utilizzando "proxy". Hai un server, in genere php, che ha la tua chiave API e fa richiesta a google utilizzando quella chiave quando un client raggiunge lo script del server.

La risposta dell'API viene registrata, redatta e passata al client richiedente. I tuoi clienti non vedono mai la chiave API e hai più voci di registro relative all'utilizzo della tua app. Inoltre, ti aiuta a escludere determinati utenti senza re-keying e persino a cambiare i fornitori di backend mantenendo una risposta uniforme dal punto di vista del tuo cliente.

    
risposta data 11.03.2017 - 15:21
fonte

Leggi altre domande sui tag