2012-08-30 11 views
6

Sto sviluppando una soluzione per la mia azienda con la seguente architettura: un servizio Web RESTfull costruito su django che fornisce un livello di autenticazione e persistenza a entrambi applicazione client Web e un'app mobile (che è stata scritta utilizzando PhoneGap).Autenticazione per un'applicazione web e mobile su un servizio web RESTfull costruito su django

Abbiamo cercato molto su Internet in merito ai metodi di autenticazione lato client, fornendo supporto sia per l'app client web che mobile, e da quello che abbiamo trovato (che è molto scarso) stiamo pensando di generare un'API chiave per ogni utente connesso da un'app client mobile e salvando questa chiave API nella memoria locale del dispositivo; e, nel client Web, utilizzando la tradizionale gestione delle sessioni di cookie, incluso un token CSRF nelle richieste POST, PUT e DELETE.

Vorremmo sapere quali sono le migliori pratiche sui metodi di autenticazione e, questo approccio è abbastanza buono? Esistono altri metodi per gestire l'autenticazione? qual è il migliore?

Stiamo tentando di annullare utilizzando oAuth, poiché aggiunge complessità al nostro sviluppo.

Abbiamo già controllato this question ma le sue risposte non ci sono state di grande aiuto, dal momento che utilizziamo PhoneGap e abbiamo l'architettura menzionata.

Grazie per il vostro aiuto!

risposta

1

Se davvero vuoi davvero creare la tua soluzione. È la mia vecchia cattiva soluzione prima dei tempi di OAuth.

  1. CREATE VIEW che restituiscono qualche chiave dopo il login di successo con nome utente/pass e aggiungere access_key generato al db
  2. check chiave nella richiesta => se esiste in db => login

    #pseudo code 
    #view 
    from django.contrib.auth import authenticate, login 
    
    def get_my_token(request, username, password): 
        user = authenticate(username, password) 
        if user is not None: 
         login(request,user) 
         #first should check has access_key 
         try: 
          return UserAuth.objects.filter(user=user).access_key 
         except: 
          pass 
         access_key = 'somecrazy_random_unique_number' 
    
         user_auth = UserAuth() 
         user_auth.user = user 
         user_auth.access_key = access_key 
         user_auth.save() 
         return access_key 
    

Ora è possibile salvare access_key da qualche parte e aggiungere come intestazione 'access_key_or_any_other_name' a ogni chiamata alle risorse di riposo. Crea il middleware di autenticazione, non il back-end di autenticazione.

#auth_middelware 
    class StupidNoAuthMid(object): 
     def process_request(self, request): 
      access_key = reuest.META['access_key_or_any_other_name']: 
      try: 
       user = UserAuth.objects.filter(access_key=acces_key).user 
       auth.login(request, user) 
      except: 
       pass 

Non si desidera reinventare la ruota. Usa oAuth, puoi salvare access_token per il futuro.

+0

questo approccio è simile alle credenziali client OAuth 2.0 che concedono tipo/flusso. –

Problemi correlati