2015-11-16 16 views
11

Sto provando a creare un'API (utilizzando ASP.NET WebApi) che verrà utilizzata da un'app mobile nativa per un progetto scolastico. (Non sono preoccupato per lo sviluppo dell'applicazione mobile, questa responsabilità ricade su un membro diverso) Sono a un punto in cui ho bisogno di implementare un accesso Facebook basato su token. Sono disponibili numerosi tutorial su come implementare questa funzione per le app basate su browser (questo è abbastanza semplice e la maggior parte di esso è integrato), ma non credo di seguire come ciò potrebbe funzionare con le app native. Quello che non capisco è come funzionerebbero i reindirizzamenti?Implementazione dell'autenticazione esterna per l'app mobile in ASP.NET WebApi 2

In base a questo link, nulla deve essere gestito in modo specifico dal mio server. E non penso di capire come funzionerebbe? Come dovrebbero essere gestiti i token di Facebook?

Inoltre, quale parte della gestione dei token dovrei implementare, non ho potuto trovare una buona documentazione per l'autenticazione di accesso esterno WebApi.

In ogni caso, se qualcuno potrebbe indicarmi il flusso esatto di scambi di token che si verificano e ciò che è implementato di default da ASP.NET, sarebbe di grande aiuto.

Inoltre, il più grande punto di confusione per me è che non capisco come verrà gestito il token restituito da Facebook.

  1. Presumo che il token verrà restituito al client (app mobile), come posso accedervi sul mio server?
  2. Come si crea un token locale dal token di Facebook? Tutto questo è fatto internamente/auto-magicamente da ASP.NET?

Mi dispiace se questo è qualcosa che avrei dovuto essere in grado di capire. Ho fatto un bel po 'di ricerche e mi sono ritrovato ad annegare in (correlata & informazioni non correlate). Non credo nemmeno di sapere come cercare le informazioni di cui ho bisogno.

Alcuni link che ho letto:

Claims And Token Based Authentication (ASP.NET Web API)

Token Based Authentication using ASP.NET Web API 2, Owin, and Identity

ASP.NET Web API 2 external logins with Facebook and Google in AngularJS app

risposta

11

ho dovuto fare praticamente la stessa cosa per un'applicazione stavo lavorando. Ho anche avuto un sacco di problemi nel trovare informazioni a riguardo. Sembrava che tutto ciò che trovavo fosse vicino a quello di cui avevo bisogno, ma non esattamente la soluzione. Ho finito per prendere frammenti da diversi post del blog, articoli, ecc. E metterli tutti insieme per farlo funzionare.

Ricordo che due dei link che hai postato "Autenticazione basata su token e attestazioni" e "Accessi esterni di ASP.NET Web API 2 con Facebook e Google in AngularJS" erano quelli che avevano informazioni utili.

Non posso darti una risposta esauriente visto che non ricordo tutto quello che dovevo fare, né ho nemmeno capito tutto quello che stavo facendo in quel momento, ma posso darti un'idea generale. Sei sulla strada giusta. In pratica, ho finito per utilizzare il token concesso da Facebook per confermare che erano collegati al loro account Facebook, creato un utente in base al loro ID utente di Facebook e concesso loro il mio token al portatore che potevano usare per accedere alla mia API .

Il flusso simile a questa:

  1. client esegue l'autenticazione con Facebook tramite qualsiasi metodo (abbiamo usato oauth.io)
    • Facebook li restituisce un token
  2. client invia le informazioni token l'endpoint di registrazione del mio controller WebApi
    • Il token viene convalidato utilizzando Graph API di Facebook, che restituisce informazioni utente
    • Un utente viene creato nel database tramite ASP.NET identità con il loro Facebook ID utente come chiave
  3. client invia le informazioni token al l'autenticazione degli endpoint di mio controller WebAPI
    • il token viene convalidato utilizzando Graph API di Facebook, che restituisce informazioni utente
    • le informazioni utente viene utilizzato per cercare l'utente nel database, conferma di aver precedentemente registrato
    • ASP.NET identità viene utilizzato per generare un nuovo token per l'utente
    • Questo token viene restituito al client
  4. client include un'intestazione di autorizzazione in tutte le future richieste HTTP con il nuovo token concesso dal mio servizio (ex. "Autorizzazione: portatore TOKEN")
    • Se l'endpoint WebAPI ha l'attributo [Autorizza], ASP.NET Identità convaliderà automaticamente portatore token e rifiutare l'accesso se non è valida

Alla fine ci sono un sacco di codice personalizzato per implementare la roba di OAuth con ASP.NET Identity, e quei link che hai incluso ne mostrano alcuni. Speriamo che questa informazione ti aiuti un po ', mi dispiace non aver potuto aiutare di più.

+0

Grazie per il flusso. Mi sento di avere una comprensione migliore di quella che ho fatto la settimana scorsa. Ho una domanda di follow-up. Devo creare un cookie lato server in qualsiasi momento? (Sto usando un'autenticazione basata su Token) Inoltre, un altro livello aggiunto di complessità deriva dal fatto che sto usando un archivio dati NoSQL (e non l'opzione standard SQL). il che significa che dovrò implementare un codice personalizzato. Hai qualche informazione su questo argomento? Qualche link puoi condividere? –

+0

Non credo che avrete bisogno di un cookie di qualsiasi tipo poiché invierete il token di trasporto come intestazione in tutte le vostre richieste di post-autenticazione al server. Non ho alcuna esperienza nell'implementare qualcosa di simile con un data store NoSQL. Scusa, vorrei poterti aiutare di più. In bocca al lupo. – mattherman