2012-12-13 12 views
5

Sto costruendo un'API RESTful JSON costruita con node.js e express.js,come proteggere un'API RESTful JSON per chiamate sia mobili che AJAX?

l'API sarà accessibile sia tramite chiamate AJAX lato client (da Ember.js) che da un'app mobile Android nativa (standard Richieste HTTP).

sto cercando in due cose:

1) l'autenticazione - come sapere quale utente sta accedendo all'API, in fase di sviluppo Ho usato una chiave API per ciascun utente e la passò nell'intestazione della richiesta

2) sicurezza: come assicurarsi che solo i veri utenti autenticati accedano ai dati privati.

le chiavi API sono una buona strategia sia per i client mobili nativi che per le chiamate AJAX? (l'utente invia l'utente + passa all'API e riceve una chiave API, che viene quindi utilizzata per creare richieste aggiuntive)

dovrei guardare qualcosa come OAUTH (1 o 2)? Al momento non ho piani per le applicazioni di terze parti per accedere all'API, quindi non ho bisogno di autorizzazione, ma questo può cambiare in futuro.

significa che devo avere il mio server di provider OAUTH?

+0

OAuth sarebbe una buona soluzione esistente e generica per il tuo problema che risolve anche una serie di possibili problemi futuri. C'è qualche ragione per non usarlo? – mtsr

+0

Non ho alcuna esperienza con OAuth, quindi ho chiesto prima la strategia .. devo eseguire il mio server provider OAuth? –

+0

Hai ricevuto la risposta adesso? Ho lo stesso puzzle. –

risposta

0

È possibile utilizzare le sessioni express.js per l'autenticazione normale con una chiave di sessione memorizzata nell'archivio sessioni. Per la compatibilità con le chiamate REST non cookie, è possibile utilizzare un campo aggiuntivo, "mySessionId", aggiunto alla query o al corpo della richiesta. Quindi modificare la verifica dell'autenticazione per verificare il campo aggiuntivo. Forse un esempio potrebbe essere più utile:

in veloce:

var server = express.createServer(); 
server.use(express.cookieParser()); 
server.use(express.session(sessionInfoObject)); 
server.get("/path/to/endpoint", function(request, response) { 
    if(typeof(request.query.mySessionId) != "undefined") { 
     // authenticate with the session id in mySessionId 
     // eg: if (getSession(request.query.mySessionId).isAuth) {} 
    } 
    else { 
     // session authentication, use request.session 
     // eg: if (getSession(request.query.mySessionId).isAuth) {} 
    } 
}); 

Se si sceglie di andare su questa strada, fare in modo che quando si autenticare l'utente, si aggiungono anche i dati relativi agli utenti nel sessione. Renderà la tua vita molto più facile. Esempio:

if(authenticated) { 
    request.session.isAuth = true; 
    request.session.customId = customId; 
} 

Ci sono alternative, ma questa è quella che trovo più semplice.

Problemi correlati