En un artículo de noviembre de 2014 de Alex Bilbie, se aconsejó a los usuarios de OAuth que no enviaran al cliente sus credenciales ( client_id
y client_secret
) al realizar Contraseña del propietario del recurso otorgan llamadas. Según tengo entendido, la idea es que para que el cliente pueda agregar sus credenciales a sus solicitudes, dichas credenciales deben estar escritas en su código fuente (a menudo HTML / JS) y, por lo tanto, accesibles a posibles atacantes, que luego podrían usarlas para realizar llamadas a la API suplantando al cliente.
En comentarios de otra publicación del blog , el autor añadido:
Si puedo ver la fuente y copiar las credenciales del cliente, no hay nada que me impida crear mi propia aplicación que pueda autenticarse en su servicio OAuth y luego llamar a la API.
La solución alternativa propuesta es que el cliente no debe llamar directamente a la API, sino a un proxy delgado que sería responsable de adjuntar las credenciales del cliente a la solicitud y luego enviarla a la API.
Como novato ingenuo de OAuth, no entiendo por qué esto evitaría que los atacantes realicen llamadas a mi API. Si el cliente no tiene que agregar sus credenciales a sus solicitudes, nadie lo hace. A medida que el proxy agrega automáticamente las credenciales, cualquier solicitud enviada a la API se trata como proveniente del cliente autorizado.
Alguien le preguntó a Alex Bilbie esta misma pregunta en Twitter. Aquí está su respuesta:
¿Cómo asegurarías el proxy? ¿No puede el atacante simplemente enviar una solicitud al proxy y completar el secreto?
el punto es que estás ocultando los detalles de implementación de tu backend y, por lo tanto, conservas más control
Estaría agradecido si alguien pudiera dar más detalles sobre esta respuesta, ya que no veo qué podría obtener (en lo que respecta a la seguridad) al ocultar los detalles de la implementación y al mismo tiempo eliminar la necesidad de que un cliente se autentique.