Autorizando a un dispositivo para acceder a los recursos del usuario

3

Descripción:

Estoy construyendo un sistema de visualización de información. El sistema consta de lo siguiente:

  • Un backend basado en Django Rest Framework que proporciona una API JSON de bajo nivel
  • Un front-end web de aplicación de una sola página para usuarios que hace uso del backend
  • Dispositivos Raspberry Pi independientes que utilizan la API de JSON para obtener contenido para mostrar en una pantalla
  • Los usuarios crean cuentas para sí mismos, después de lo cual pueden cargar medios al servidor, crear listas de reproducción y establecer cuál de sus dispositivos usa qué lista de reproducción. Por ejemplo, pueden cargar una imagen, crear una lista de reproducción con la imagen y luego decirle a uno de sus dispositivos que muestre esa lista de reproducción.

    Limitaciones:

    Solo el usuario que posee los medios o la lista de reproducción puede acceder a ellos.

    Las computadoras Raspberry Pi no pueden actuar como servidores, solo pueden hacer solicitudes al back-end.

    Las computadoras Raspberry Pi no son utilizadas directamente por el usuario final. No tiene teclado. Idealmente, el usuario simplemente conecta los cables de alimentación y de Ethernet del dispositivo y todo "simplemente funciona".

    Cada dispositivo solo puede tener un propietario (o ninguno).

    El dispositivo solo recupera listas de reproducción y medios (por ejemplo, imágenes, video) del servidor.

    El dispositivo solo puede recuperar listas de reproducción que pertenezcan al propietario del dispositivo.

    Problema :

    ¿Cuál es una forma segura de establecer la propiedad del dispositivo y asegurarse de que un dispositivo solo pueda recuperar listas de reproducción que pertenezcan a su propietario? Obviamente, el dispositivo no tiene el nombre de usuario / contraseña necesarios para acceder a los recursos del usuario de manera normal.

    He considerado una solución en la que el dispositivo tiene una ID única que es demasiado larga para adivinar y solo está disponible para alguien que tenga acceso físico al dispositivo.

    El usuario podría tomar posesión de un dispositivo agregando la ID del dispositivo a la lista de dispositivos que posee.

    Esta ID se pasaría junto con la solicitud del dispositivo para una lista de reproducción, y el servidor le brindará acceso si el propietario de la lista de reproducción y el dispositivo son los mismos.

    El problema es que si alguien descubre el ID del dispositivo, podrá tomar el dispositivo por sí mismo o descargar las listas de reproducción de otras personas. La ID del dispositivo tampoco se pudo cambiar.

    ¿Cuál sería una mejor manera de obtener listas de reproducción del dispositivo? Gracias.

        
    pregunta Atuos 31.10.2015 - 15:08
    fuente

    1 respuesta

    4
      

    El usuario podría tomar posesión de un dispositivo agregando el   ID de dispositivo a una lista de dispositivos que poseen.

    Lo que necesita es alguna forma de demostrar que el usuario está en posesión física del dispositivo.

    Pasando por media (e.g. images, video) , suena como que tiene una pantalla de alguna forma, por lo tanto, sería más fácil mostrar un PIN temporal en el dispositivo que el usuario debe ingresar junto con la identificación del dispositivo en su sitio cuando lo intenta y agrega el dispositivo a su cuenta.

    Puede generar este PIN en línea y enviarlo al dispositivo, o generarlo sin conexión utilizando un protocolo como TOTP .

      

    Esta identificación se pasará junto con la solicitud del dispositivo para una lista de reproducción

    Una vez que haya realizado el proceso de autenticación, no recomendaría enviar la ID. En lugar de eso, genere un conjunto temporal de credenciales durante el proceso de autenticación y envíelos al dispositivo, de esa manera puede revocar las credenciales si es necesario o si el usuario vuelve a autenticarse (digamos que le dan el dispositivo a otra persona).

    También sugeriría incrustar una clave privada única para cada dispositivo, de esa manera puede cifrar fácilmente las credenciales temporales con la clave pública del dispositivo sabiendo que si alguien más obtiene las claves, solo el dispositivo auténtico podrá descifrarlas. .

        
    respondido por el thexacre 01.11.2015 - 01:08
    fuente

    Lea otras preguntas en las etiquetas