Sicurezza dell'accesso a Facebook

1

Ho un'applicazione client / server, voglio accedere con Facebook alla mia app. Posso ottenere un token di accesso utilizzando il login di Facebook dal client, quindi inviarlo al server per autenticare l'utente. La mia domanda è, come faccio a sapere che è stata la mia app quella che ha effettuato l'accesso a Facebook? Cosa succede se un'altra app con cui l'utente ha effettuato l'accesso a Facebook ha fatto quella richiesta?

    
posta Alfredo Altamirano 03.11.2016 - 02:49
fonte

1 risposta

1

La connessione a Facebook è praticamente aperta e si collega a poche modifiche. Quindi, per capire il modello di sicurezza, può essere utile capire come funziona oauth. Ci sono molte risorse su quello disponibile in rete.

La tua domanda non è abbastanza specifica da darti una risposta specifica. Immagino che tu stia progettando un'applicazione server progettata per essere utilizzata nei browser (agenti utente) e che non ti preoccupi realmente di quale applicazione ha fatto la richiesta di accesso originale per autenticare l'utente, ma piuttosto che vuoi evitare un scenario in cui un utente che non è autorizzato a utilizzare l'applicazione server può utilizzarlo perché si è autenticato con successo su Facebook in precedenza, direttamente su fb o utilizzando un'altra app che utilizza la connessione Facebook.

I commenti alla tua domanda originale forniscono già risposte a questa domanda:

Quando si riceve un token di accesso da fb connect, è necessario verificarlo. C'è un endpoint fornito da Facebook per farlo, quindi l'applicazione server deve inviare una richiesta di verifica a tale endpoint. Se non lo verifichi, proprio come temi, potresti finire con un token di accesso che non era pensato per la tua app, o per un altro utente, o era scaduto. Se lo verifichi, riceverai una risposta JSON dall'endpoint di verifica che contiene un ID utente e un ID app. Puoi confrontare l'ID app con il tuo ID app per vedere se il token è pensato per la tua applicazione. Un utente malintenzionato non dovrebbe essere in grado di produrre un token con il tuo ID app (in parte perché l'ID app non dovrebbe essere noto a nessuno tranne a FB e te). Ma io il motivo principale per cui nessuno può agire come se fossero la tua app è perché devi fornire l'app segreta come parte del processo di verifica. Solo tu e FB conoscete quel segreto. Quindi FB può fallire la verifica se l'app segreta e l'ID app nel token non appartengono alla stessa app (c'è in realtà un altro passo in avanti prima della verifica - è necessario prima ottenere un token di accesso all'app, per poterlo utilizzare con la verifica endpoint e per ottenere il token dell'app, è necessario fornire l'ID dell'app e il segreto).

Dalla risposta di verifica, puoi anche vedere se l'ID utente è quello che ti aspetti che sia. Uno ha verificato il token, è autenticato e puoi fidarti di ciò che dice su chi e per quale applicazione è il token. Finché non verifichi i token, sono solo affermazioni che chiunque potrebbe fare.

    
risposta data 03.11.2016 - 09:20
fonte

Leggi altre domande sui tag

Cos'è la 'disassociazione della shell modulare dal kernel' ___ suffisso qstnhdr ___ davanti alla chiave pubblica SSH ______ qstntxt ___

Ho generato diverse chiavi SSH (DSA, RSA, ECDSA, ecc.) con %code% e con l'ultima versione di %code% e entrambe le utilità suffisso la chiave pubblica con una stessa stringa. Voglio dire, ad esempio, sia la chiave RSA suffisso con %code% , la chiave ED25519 con %code% o la chiave RSA-1 con una lunghezza chiave (ad esempio %code% ). Questo formato di suffisso proviene da alcuni standard? Sono quegli stessi suffissi usati da tutte le utility che generano una coppia di chiavi SSH?

    
______ azszpr142217 ___

Nit: questi nomi vengono prima del blob e quindi sono prefissi non suffissi.

Questo standard per il formato file publickey è impostato da OpenSSH , che lo utilizza anche nei file %code% e %code% con altri (anche prefisso !) campi aggiunti. Vedere %code% su Unix con OpenSSH installato o l'ultima versione sul web in "FORMATO FILE AUTHORIZED_KEYS" e "FORMATO FILE SSH_KNOWN_HOSTS" . Tutti i tasti versione 2 utilizzano una stringa per keytype e un blob codificato in base64 del publickey trasmesso durante lo scambio di chiavi SSH (v2), che è definito da diversi RFC.

La manpage online non include più le chiavi della versione 1, anche se tutte le versioni di AFAICT fino ad oggi (tramite 7.3) supportano ancora la versione 1, MA scoraggiano strongmente il suo uso perché è obsoleto e rotto da tempo. La versione 1 utilizzava tre numeri decimali: nbits, esponente (piccolo) e modulo (grande).

PuTTYgen visualizza in modo proattivo il formato OpenSSH, ma il pulsante SalvaPublicKey (o voce di menu File) scrive il diverso, sebbene relativo formato definito da rfc4716 utilizzato anche da OpenSSH %code% . Comprendo che l'implementazione SSH "commerciale" (fka Tectia) utilizza questo formato non può confermare personalmente.

I tipi di chiave per le chiavi "normali" sono generalmente definiti dagli RFC SSHv2, collegati da un registro IANA . OpenSSH supporta anche la propria forma di certificati utilizzando i tipi di chiave nel formato definito dal fornitore %code% che non sono registrati. Infine, OpenSSH usa il nome di forma standard %code% anche se AFAICT è ancora in bozza e non ancora un RFC .

    
___