API pública con el token de autorización: ¿es posible proteger el token de demostración?

10

Tengo una API REST para ejecutar algunos cálculos y devolver el resultado, con un sistema de token muy simple donde solo los usuarios autorizados pueden usar la API.

El usuario agrega su token a la consulta de esta manera:

{
    authorization: 'my token',
    moreData: 51351,
    etc: 'etc'
}

Debido a que los usuarios de esta API generalmente no son programadores, he creado una página web muy simple que muestra la API, con una demostración en vivo que se puede ejecutar directamente desde la página web, demostrando cómo funciona y qué se devuelve.

Esta demostración tiene un token de autorización falso, que se muestra en la consulta de ejemplo. He creado una función de JavaScript simple, oculta y parcialmente ofuscada que intercepta este token falso y lo reemplaza por un token real antes de enviar la solicitud, que probablemente engañará a la mayoría de los usuarios. Pero un usuario que realmente vea la solicitud desde la herramienta de depuración en el navegador verá fácilmente el token real que se envía, y puede usar este token para enviar su propia solicitud.

Por supuesto, podría limitar el token de demostración, pero eso significaría que los usuarios que están experimentando con la demostración en vivo podrían experimentar bloqueos temporales, que me gustaría evitar.

¿Hay alguna forma de proteger el token de autorización de demostración de una API que debe ser fácil de usar y necesita una demostración en vivo?

    
pregunta Erlend D. 16.11.2018 - 08:55
fuente

2 respuestas

26

Como Steffen ha dicho, no puedes proteger el token de los usuarios.

Me gustaría añadir una sugerencia para un escenario más general de tener una "demo" Api. Parece que su API no tiene datos almacenados y solo realiza cálculos en la entrada, por lo que esto puede no ser una preocupación para usted, pero en lugar de que el token de demostración apunte a su api real, puede apuntar a un demo / sandbox Versión con datos significativos, pero no reales que podrían:

  1. solo tiene el token de demostración en él, no hay otros usuarios
  2. se restablecerá automáticamente a diario
  3. tiene una pequeña cantidad de datos en lugar de su conjunto completo (si tiene datos)
  4. posiblemente no devuelva resultados válidos para todos los cálculos como una forma de exigir que las personas obtengan una cuenta real de usted en lugar de simplemente usar el token de demostración

Esto me parecería más seguro ya que su sistema en vivo nunca sería tocado por nadie con el token de demostración, y en situaciones en las que puede tener una funcionalidad que está vendiendo, permite a los desarrolladores integrar y confirmar que se han integrado correctamente, pero no regala el conjunto completo de funcionalidad / datos al token de demostración.

    
respondido por el GreatSeaSpider 16.11.2018 - 10:51
fuente
11

No es posible proteger el token porque, como te has dado cuenta, el usuario simplemente puede ver qué tipo de solicitud se envió. Como el sitio de demostración está bajo su control, puede cambiar el token de demostración cuando lo desee. Siempre y cuando solo aceptes tokens válidos y cambies el token con la frecuencia suficiente, limitarás el mal uso del token. Y como la página que incluye el token fue generada por el servidor, también podría generar un token específico para la dirección IP de origen de los usuarios y tal vez una cookie que limitaría aún más el mal uso del token.

    
respondido por el Steffen Ullrich 16.11.2018 - 09:02
fuente

Lea otras preguntas en las etiquetas