2012-08-30 14 views
6

Estoy desarrollando una solución para mi empresa con la siguiente arquitectura: Servicio web RESTfull construido en django que proporciona autenticación y capa de persistencia a ambos aplicación de cliente web y una aplicación de cliente móvil (que se escribe utilizando phonegap).Autenticación para una aplicación web y móvil a través de un servicio web RESTfull construido en django

Hemos estado buscando mucho en Internet sobre los métodos de autenticación en el lado del cliente, proporcionando soporte para la aplicación cliente web y móvil, y por lo que hemos encontrado (que es muy pobre) estamos pensando en generar una API clave para cada usuario que inició sesión desde una aplicación cliente móvil, y guardando esta clave API en el almacenamiento local del dispositivo; y, en el cliente web, utilizando la gestión de sesiones de cookie tradicional, que incluye un token CSRF en las solicitudes POST, PUT y DELETE.

Nos gustaría saber cuáles son las mejores prácticas en los métodos de autenticación y, ¿este enfoque es lo suficientemente bueno? ¿Hay algún otro método para tratar con la autenticación? cual es el mejor?

Estamos tratando de anular el uso de oAuth, ya que agrega complejidad a nuestro desarrollo.

Ya hemos comprobado this question pero sus respuestas no nos han sido de mucha ayuda, ya que estamos usando phonegap, y tenemos la arquitectura mencionada.

Gracias por su ayuda!

Respuesta

1

Si realmente quieres crear tu propia solución. Es mi vieja y mala solución antes de OAuth veces.

  1. CREATE VIEW que devuelven alguna tecla después de iniciar la sesión correctamente con nombre de usuario/contraseña y añadir access_key generada a db
  2. clave Fecha de solicitud => si existe en db => iniciar sesión

    #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 
    

Ahora puede guardar access_key en algún lugar y agregar como encabezado 'access_key_or_any_other_name' a cada llamada a recursos de descanso. Crear middleware de autenticación, no auth backend.

#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 

No desea reinventar la rueda. Use oAauth, puede guardar access_token para el futuro.

+0

este enfoque es similar a las credenciales del cliente OAuth 2.0 conceder tipo/flujo. –

Cuestiones relacionadas