android - studio - Servicio web RESTfull usando oAuth para aplicaciones móviles
restful web services android studio (1)
Después de investigar más y hablar con algunos de mis colegas, decidí que la mejor opción es la Segunda idea . Decidí manejar los redireccionamientos usando WebView (que existe tanto en iPhone como en Android). WebView Voy a configurar de tal manera que salga automáticamente cuando el usuario sea redirigido a una URL específica en la aplicación web que devuelve JSON.
Decidí que esta es la mejor idea porque de esta manera solo tengo que implementar / configurar WebView en la aplicación móvil mientras toda la lógica de OAuth se hace en la aplicación web, lo que significa que hay menos repetición de código entre las aplicaciones móviles (Android, iPhone) y es más extensible (tengo que modificar una aplicación web, no 2 o 3 aplicaciones móviles).
Estoy construyendo aplicaciones que constan de dos partes principales:
- Aplicación web con API de descanso.
- Aplicación móvil (Android, iPhone).
La aplicación web tiene una base de datos que almacena datos sobre los usuarios (como publicaciones, eventos y similares).
La aplicación móvil usa la API de reposo de la aplicación web para acceder a esos datos, pero para hacer eso necesito algún tipo de autenticación (el usuario debe autenticarse para acceder / modificar sus datos).
Sé que podría hacerse fácilmente de tal manera que la aplicación móvil proporcione nombre de usuario y contraseña en cada solicitud hacia la API web, y la aplicación web autentique ese nombre de usuario y contraseña en la base de datos antes de enviar la solicitud.
Sin embargo, me gustaría usar oAuth (para que el usuario pueda iniciar sesión usando Google, Facebook, ...) y aquí es donde las cosas se complican, y no estoy seguro de cuál es la mejor manera de hacerlo.
Mi primera idea : la aplicación móvil envía las credenciales del proveedor de OAuth (por ejemplo, Facebook) (nombre de usuario y contraseña) a la aplicación web, que luego las autentica contra el proveedor de OAuth. Pronto me di cuenta de que no está bien porque eso significa que el usuario tiene que confiar en que su sitio no abuse de las credenciales dadas, por lo que esta no es la forma en que se hace. No está bien
Mi segunda idea : la aplicación móvil usa una aplicación web api para decirle a la aplicación web que quiere autenticarse contra el proveedor de OAuth P. La aplicación web redirige al proveedor P donde el usuario ingresa sus credenciales. Después de ese proveedor, P redirecciona a la aplicación web donde el usuario está conectado y JSON acerca del inicio de sesión exitoso se envía a la aplicación móvil. Esto sería genial si no fuera por parte donde el usuario tiene que ingresar sus credenciales manualmente. Implementé esta solución y el problema es que, después de que la aplicación móvil acceda a la API de la aplicación web, JSON no se devuelve inmediatamente, pero los primeros redireccionamientos se hacen y eso arruina todo. Estaba pensando en usar webView dentro de la aplicación para dispositivos móviles, pero no sé cómo regresar desde webView cuando se vaya a enviar JSON. No estoy seguro de si debería continuar con esta idea o si esta es la forma incorrecta de hacerlo. Quizás sea bueno si algunos problemas fueron resueltos
Mi tercera idea : la aplicación móvil se autentica directamente contra el proveedor OAuth P. Si fue exitosa, la aplicación móvil envía solicitudes a la aplicación web que contiene información del usuario (por ejemplo, ID de usuario o contraseña de usuario) para que la aplicación web sepa qué usuario es. Sin embargo, esto significa que la aplicación web debe confiar en la aplicación móvil que el usuario dado está realmente autenticado. Eso significa que la aplicación web debe estar segura de que se accede a la API desde la aplicación móvil. Podría hacerlo codificando una contraseña especial (secreta) en la aplicación móvil que se envía con cada solicitud para probar que la aplicación móvil envió la solicitud.
El lado malo de este enfoque es que tengo que implementar la autenticación de aplicaciones móviles contra el proveedor de oAuth para cada combinación de (SO móvil, proveedor de oAuth). Además, no estoy seguro de qué tan seguro es. ¿Crees que este es un buen camino a seguir, qué puedo mejorar / cambiar? Tengo la sensación de que me estoy perdiendo algo. Quizás sea bueno, pero tiene mucho trabajo por hacer
Por favor dígame qué idea es la mejor y si hay alguna forma de mejorarlas, gracias