OAuth2 para aplicaciones móviles con cliente backend confidencial (¿Se requiere PKCE?)

1

Me pregunto por qué ni rfc6749 ni rfc8252 parecen considerar el caso en que la aplicación móvil no realizar solicitudes de recursos protegidos (y, por lo tanto, no es un cliente), sino que se basa en un servidor backend (cliente confidencial) que sí lo hace.

* Tenga en cuenta que uso el término aplicación móvil en lugar de aplicación nativa solo porque la especificación define una aplicación nativa como un cliente público :

Desde rfc6749

  • Sección 2.1:

      

    Una aplicación nativa es un cliente público instalado y ejecutado en         El dispositivo utilizado por el propietario del recurso. Datos de protocolo y         Las credenciales son accesibles para el propietario del recurso. Es asumido         que cualquier credencial de autenticación del cliente incluida en el         La aplicación puede ser extraída. Por otro lado, dinámicamente         credenciales emitidas, como tokens de acceso o tokens de actualización, pueden         Recibir un nivel aceptable de protección. Como mínimo, estos         Las credenciales están protegidas de servidores hostiles con los que el         La aplicación puede interactuar. En algunas plataformas, estas credenciales.         Podrían estar protegidos de otras aplicaciones que residan en el mismo         dispositivo.

  • sección 1.1:

      

    cliente -         Una solicitud que realiza solicitudes de recursos protegidos en nombre de la         propietario del recurso y con su autorización

El caso sobre el que estoy preguntando es similar a cómo rfc6749 sección 2.1 define una aplicación web , pero en lugar de una interfaz de usuario HTML , la interfaz sería una aplicación móvil :

  

Una aplicación web es un cliente confidencial que se ejecuta en una web         servidor. Los propietarios de recursos acceden al cliente a través de un usuario HTML         interfaz representada en un agente de usuario en el dispositivo utilizado por el         propietario del recurso Las credenciales del cliente así como cualquier acceso.         El token emitido al cliente se almacena en el servidor web y se         no expuesto o accesible por el propietario del recurso.

La definición de rfc8252 de aplicación nativa parece más razonable ya que no restringe su uso a las aplicaciones que son clientes públicos:

  

" aplicación nativa " Una aplicación o aplicación instalada por el usuario para         su dispositivo, a diferencia de una aplicación web que se ejecuta en el navegador         Sólo contexto. Aplicaciones implementadas usando tecnología basada en web pero         distribuidas como una aplicación nativa, llamadas "aplicaciones híbridas", son         Se considera equivalente a las aplicaciones nativas para los fines de este         especificación.

Pero, una vez más, la especificación solo proporciona la mejor práctica para el caso en el que la aplicación nativa también es el cliente (público).

En resumen,

  1. Me pregunto por qué no he podido encontrar ninguna mención del perfil del cliente que describí anteriormente (ya sea en las especificaciones o en otra parte).
  2. ¿Se consideraría la concesión de código de autorización ( sin PKCE ) suficientemente seguro ya que incluso si una aplicación maliciosa intercepta el código de autorización (enviado por el usuario externo-agente a la aplicación nativa, a través de la comunicación entre aplicaciones) no podría cambiarlo por un token de acceso, ya que no estaría en posesión de ¿El secreto del cliente que se almacena en el backend?

Tenga en cuenta que solo estoy haciendo estas preguntas para obtener una mejor comprensión de la teoría, y no para nada práctico.

    
pregunta catanman 30.05.2018 - 05:01
fuente

1 respuesta

1

El flujo que describe es exactamente lo que Google ofrece para aplicaciones móviles: enlace

Después de observar con más detalle el rfc 6749, podemos observar que este flujo no respeta las recomendaciones.

enlace

  

El servidor de autorización DEBE:

     

o asegurarse de que el código de autorización fue emitido a la   autenticado         cliente confidencial, o si el cliente es público, asegúrese de que el         el código se emitió para "client_id" en la solicitud,

De hecho, el código de autorización se emitió a la aplicación nativa y es la aplicación web la que intenta intercambiar el código.

Es responsabilidad del desarrollador decidir si desea respetar estrictamente el RFC y, en este caso, usar el código de Autorización de flujo con PKCE y luego enviar el token de acceso al servidor backend para que pueda acceder al servidor de recursos; o si quiere usar el mismo flujo que google.

    
respondido por el Alex83690 31.05.2018 - 09:50
fuente

Lea otras preguntas en las etiquetas