2016-04-05 12 views
5

Ho il seguente codice nel mio dichiarazione app angolare - una chiave API per Facebook (per implementare pulsante Condividi):angolare - Non riesco a vedere come nascondere questa API Key

.run(function($FB){ 
    $FB.init('9xxxxxxxxxxxx94'); 
}) 

quindi so il generale rispondere a questo - 'Le chiavi API devono essere mantenute sul lato server', tuttavia non vedo come effettivamente lo implemento.

Il metodo di chiamata condivisa viene eseguito sul front-end, quindi anche se il mio server ha mantenuto la chiave API e l'ha inviata, sicuramente è ancora visibile sul front-end, altrimenti come funzionerebbe il pulsante di condivisione?

Quindi la mia domanda, come posso nascondere la chiave API di Facebook?

Grazie.

+0

Ho cercato questo per tempo. Non vedo alcun metodo definitivo per 'nascondere' la chiave, tuttavia, devi pensare, perché Facebook non ti permette solo di farlo, ma mostra come usarlo nel tuo javascript lato client ... Attualmente sto assumendo che quando tu iscriversi come sviluppatore su FB e creare un'app, ti è stato richiesto di inserire alcune informazioni identificative? Penso che quello che succede, è che FB firma un sacco di affermazioni con una chiave segreta, conosce solo FB, quindi quando lo passi indietro attraverso il web, le informazioni vengono estratte e usate per controllare che la chiave non sia manomessa, verificando la tua identità. – samazi

risposta

5

Richiedere la chiave

La prima cosa che succede è che il client richiederà una chiave. Questo avverrà solo su determinate pagine come le pagine di registrazione e accesso. L'idea qui è che vogliamo essere sicuri che solo gli utenti che navigano con un client conosciuto (in questo caso il sito web ufficiale o il client principale come viene chiamato) possano intraprendere azioni come la creazione o l'autenticazione di un utente.

Pertanto, quando l'app client richiede la pagina di accesso, il server genera un token univoco in base alle informazioni inviate nella richiesta. Le informazioni utilizzate sono sempre qualcosa che il server conosce, qualcosa che il cliente conosce e qualcosa che entrambi sanno. Ad esempio, il server può generare una chiave univoca basata su User agent + current time + secret key. Il server genera un hash basato su queste informazioni e quindi memorizza un cookie contenente solo l'hash sul computer client.

Impostazione di autorizzazioni

A questo punto la nostra chiave non è in realtà una chiave più. È stato trasformato in un token di accesso. Il server dovrebbe quindi prendere questo token di accesso e memorizzarlo per un successivo recupero. È possibile inserire la chiave in un database ma poiché i dati di questo tipo devono essere recuperati spesso suggerirei di utilizzare un archivio di valori-chiave come Redis per ridurre le letture/scritture del database e aumentare le prestazioni.

Quando si archivia il token, è necessario memorizzare anche una parte di dati separata per indicare quali autorizzazioni sono associate al token. In questo caso il nostro token agisce solo come un modo per registrare e autenticare gli utenti, quindi lo memorizziamo accanto a un valore che indica a chi appartiene il token (l'interfaccia utente web dell'app) e quali permessi ha (limitato per creare e autenticare gli utenti) . Lo trattiamo proprio come faremmo con qualsiasi altro client API in questo modo, in modo da poter acquisire statistiche e controllare come viene utilizzato.

Autorizzare una richiesta

Quando il client poi fa la richiesta POST per creare un nuovo utente o accedere al server controllerà per vedere se il client ha inviato un cookie che identifica insieme alla richiesta. In caso contrario, respingiamo la richiesta. Se invia il cookie, il server dovrebbe nuovamente generare l'hash utilizzando i valori utilizzati in precedenza (questi valori sono già noti o inviati con la richiesta comunque, quindi non stiamo davvero tassando molto il server) confrontandolo con il cookie inviato a noi e se i valori corrispondono consentono alla richiesta di procedere.

Sources - Securing API Keys

O

è sufficiente inviare una richiesta al server e fargli gestire la vostra richiesta con l'API-chiave nascosta e solo restituire il risultato della vostra richiesta al front-end.