Estamos creando un servicio de descanso y queremos utilizar OAauth 2 para autorización. El current draft (v2-16 del 19 de mayo) describe four grant types. Son mecanismos o flujos para obtener autorización (un token de acceso).Cómo mantener la confidencialidad de las credenciales del cliente, al utilizar el tipo de concesión de credenciales de propietario de recurso de OAuth2 tipo
- código de autorización
- subvención implícita
- Credenciales de recursos del propietario
- credenciales del cliente
parece que tienen que soportar las cuatro de ellos, ya que sirven para diferentes propósitos. Los primeros dos (y posiblemente el último) se pueden usar desde aplicaciones de terceros que necesitan acceso a la API. El código de autorización es la forma estándar de autorizar una aplicación web que tiene la suerte de residir en un servidor seguro, mientras que el flujo implícito de concesión sería la opción para una aplicación cliente que no puede mantener sus credenciales de manera confidencial (por ejemplo, móvil/computadora de escritorio aplicación, cliente de JavaScript, etc.).
Queremos utilizar el tercer mecanismo para proporcionar una mejor experiencia de usuario en dispositivos móviles: en lugar de llevar al usuario a un cuadro de diálogo de inicio de sesión en un navegador web, el usuario simplemente ingresará su nombre de usuario y contraseña directamente en la aplicación y el inicio de sesión. También deseamos utilizar el tipo de concesión de credenciales de cliente para obtener un token de acceso que se puede usar para ver datos públicos, no asociados con ningún usuario. En este caso, esto no es tanto una autorización, sino más bien algo similar a una clave API que utilizamos para dar acceso solo a las aplicaciones que se han registrado con nosotros, lo que nos da la opción de revocar el acceso si es necesario.
Así que mis preguntas son:
- ¿Cree que he entendido el propósito de los diferentes tipos de subvenciones correctamente?
- ¿Cómo puede mantener la confidencialidad de sus credenciales de cliente? En el tercer y cuarto caso, necesitamos tener la identificación del cliente y el secreto del cliente en algún lugar del cliente, lo cual no parece una buena idea.
- Incluso si usa el tipo de concesión implícita y no expone su secreto de cliente, ¿qué impide que otra aplicación suplante su aplicación utilizando el mismo mecanismo de autorización y su ID de cliente?
En resumen, queremos ser capaces de utilizar las credenciales del cliente y el flujo de credenciales del propietario del recurso desde una aplicación cliente. Ambos flujos requieren que almacene el secreto del cliente de alguna manera, pero el cliente es una aplicación móvil o de JavaScript, por lo que pueden ser robados fácilmente.
Investigué un poco más y creo que tienes razón, no hay forma de mantener en secreto nada sobre el cliente. Parece que, como sugiere, nuestra mejor opción para proteger el API del abuso es implementar algún tipo de monitoreo de uso. ¡Gracias por tu respuesta! –
¡Avíseme si encuentra mejores soluciones en el futuro! – heavi5ide
Solo para entender, ¿es correcta la siguiente afirmación? * No hay más seguridad cuando utiliza una sesión web autenticada (mediante una cookie más o menos) y realiza la autenticación en el servidor "a la antigua" que utilizando el tipo de concesión Credenciales de contraseña del propietario de recursos de OAuth2, porque también una sesión web clásica/la cookie podría pasarse a otros actores/podría ser robada. – spaudanjo