json - ticket - zendesk documentation
Sistema de autenticación de API simple y seguro (5)
Básicamente tiene dos opciones, ya sea restringir el acceso por IP o luego tener una clave API, ambas opciones tienen sus lados positivo y negativo.
Restricción por IP
Esta puede ser una forma práctica de restringir el acceso a su servicio. Puede definir exactamente qué servicios de terceros podrán acceder a su servicio sin obligarlos a implementar funciones de autenticación especiales. El problema con este método es, sin embargo, que si el servicio de terceros está escrito, por ejemplo, enteramente en JavaScript, entonces la IP de la solicitud entrante no será la IP del servidor del servicio externo, sino la IP del usuario, cuando se realice la solicitud por el navegador del usuario y no el servidor. Por lo tanto, el uso de la restricción de IP hará imposible escribir aplicaciones dirigidas por el cliente y forzará que todas las solicitudes pasen por el servidor con derechos de acceso adecuados. Recuerde que las direcciones IP también pueden ser falsificadas.
Clave API
La ventaja de las claves API es que no es necesario mantener una lista de direcciones IP conocidas, debe mantener una lista de claves API, pero es más fácil automatizar su mantenimiento. Básicamente, cómo funciona esto es que tiene dos claves, por ejemplo, una identificación de usuario y una contraseña secreta. Cada solicitud de método a su servicio debe proporcionar un hash de autenticación que consta de los parámetros de solicitud, la identificación del usuario y un hash de estos valores (donde la contraseña secrect se usa como sal hash). De esta forma, puede autenticarse y restringir el acceso. El problema con esto es que, una vez más, si el servicio de terceros se escribe como dirigido por el cliente (por ejemplo, JavaScript o ActionScript), entonces cualquiera puede analizar la identificación del usuario y los valores de sal secreta del código.
Básicamente, si quiere estar seguro de que solo los pocos servicios que ha definido específicamente podrán acceder a su servicio, entonces la única opción es utilizar la restricción de IP y, por lo tanto, forzarlos a enrutar todas las solicitudes a través de sus servidores. Si usa una clave API, no tiene forma de imponer esto.
Tengo una API REST JSON para otros sitios web / aplicaciones para acceder a la base de datos de mi sitio web (a través de una puerta de enlace PHP). Básicamente, el servicio funciona así: llame a example.com/fruit/orange, el servidor devuelve información JSON sobre el naranja. Aquí está el problema: solo quiero sitios web que permita acceder a este servicio. Con un sistema de clave API simple, cualquier sitio web puede obtener rápidamente una clave copiando la clave del código del lado del cliente de un sitio web autorizado (potencialmente). Miré a OAuth, pero parece un poco complicado para lo que estoy haciendo. Soluciones?
Deberías usar OAuth.
En realidad, hay dos especificaciones OAuth, la versión de 3 patas y la versión de 2 patas. La versión de 3 patas es la que recibe la mayor atención, y no es la que desea usar.
La buena noticia es que la versión de 2 patas hace exactamente lo que usted desea, permite que una aplicación otorgue acceso a otra a través de una clave secreta compartida (muy similar al modelo de servicio web de Amazon, utilizará el método de firma HMAC-SHA1) o a través de un sistema de clave pública / privada (use el método de firma: RSA-SHA1). La mala noticia es que aún no es tan compatible como la versión de 3 patas, por lo que es posible que tenga que trabajar un poco más de lo que podría haber hecho hasta ahora.
Básicamente, OAuth de 2 patas solo especifica una forma de "firmar" (calcular un hash) varios campos que incluyen la fecha actual, un número aleatorio llamado "nonce" y los parámetros de su solicitud. Esto hace que sea muy difícil suplantar las solicitudes a su servicio web.
OAuth se está convirtiendo lenta pero seguramente en un estándar aceptado para este tipo de cosas: a la larga, será mejor si lo acepta porque la gente puede aprovechar las diversas bibliotecas disponibles para hacerlo.
Es más elaborado de lo que inicialmente quisieras, pero la buena noticia es que mucha gente ha dedicado mucho tiempo para que sepas que no has olvidado nada. Un buen ejemplo es que muy recientemente Twitter encontró un vacío en la seguridad de OAuth, que la comunidad está trabajando actualmente para cerrar. Si inventaras tu propio sistema, tendrás que resolver todo esto por tu cuenta.
¡Buena suerte!
Chris
Si el código del lado del cliente de alguien está en peligro, debe obtener una nueva clave. No hay mucho que puedas hacer si su código está expuesto.
Sin embargo, puede ser más estricto al solicitar que las direcciones IP de los servidores autorizados se registren en su sistema para la clave dada. Esto agrega un paso adicional y puede ser excesivo.
No estoy seguro de lo que quiere decir con una "clave de API simple", pero debería usar algún tipo de autenticación que tenga claves privadas (conocidas solo por el cliente y el servidor), y luego ejecutar algún tipo de algoritmo de suma de comprobación en los datos para asegúrese de que el cliente sea realmente quien usted cree que es, y que los datos no han sido modificados en tránsito. Amazon AWS es un gran ejemplo de cómo hacer esto.
Creo que puede ser un poco estricto para garantizar que el código no se haya visto comprometido por parte de sus clientes. Creo que es razonable responsabilizar a sus clientes por la seguridad de sus propios datos. Por supuesto, esto supone que un atacante solo puede arruinar la cuenta de ese cliente.
Quizás pueda mantener un registro de las solicitudes de IP de una cuenta en particular, y si aparece una nueva IP, marque la cuenta, envíe un correo electrónico al cliente y pídales que autoricen esa IP. No sé si algo así podría funcionar.
Toda la producción de seguridad de IP parece producir un error gigante para los usuarios antes de conectarse. Symbian 60s tiene la capacidad más completa para dejar una señal no rastreada, confiable y segura en medio de múltiples usuarios (aplicando Opera Handler UI 6.5, Opera Mini v8 y 10) junto con la interfaz de usuario codificada, + configuración completa de la red. ¿Por qué restringir para otras características cuando finalmente se obtiene el método reconocible de hacer un método de enlace más rápido? Mantener una cuenta más identificada, un control adecuado de esa "verdadera cuenta" -si están en la pista -la conformidad de pagar las facturas y saber si los usuarios tienen un saldo pendiente de mantenimiento creará un enlace más rápido de la señal de internet al móvil popular / firmado industria. ¿Por qué hacer las funciones de seguridad difíciles antes de enviarlas al sitio, una visita a sus cuentas mensualmente puede borrar todos los problemas de conectividad? Todos los usuarios de dispositivos móviles no deberían tener la capacidad de ''conectarse'' si tienen facturas impagas. ¿Por qué no proporcionar una cuenta de registro / aplicación "TODO en uno", un programa fijo con sistema operativo (tal vez una cuenta de correo electrónico) con una "capacidad de monitoreo" si están pagando o no (se preocupan por las contraseñas). a otro departamento). Y si ''no'' apaga su cuenta exactamente y sus otras características de enlace. Cada uno de ellos tiene sus propios intereses en donde engancharse diariamente, si los bloqueaste / apagaste debido a facturas impagas que pueden iniciarlos a volver a suscribirlos y disciplinarlos más para convertirse en usuarios más responsables y que incluso pueden expirar. una cuenta si no se mantiene. El monitoreo o acceso mensual de una ''cuenta verdadera'' identificada con la colaboración del proveedor de la red produce una mayor privacidad en lugar de pedir siempre ''nombre'' y ''contraseña'', ''ubicación'', ''permisos'' a los usuarios para ver sus servicios de datos. Los IP ya marcaron su primera identidad o "encontraron la ubicación de los usuarios", por lo que no parece razonable ubicarla en las búsquedas previas de los navegadores, ¿por qué no utilizar ''Obteniendo datos'' o ''Procesando datos''?
OAuth no es la solución aquí .
OAuth es cuando tienes usuarios finales y quieres que las aplicaciones de terceros no manejen las contraseñas de los usuarios finales. Cuándo usar OAuth: http://blog.apigee.com/detail/when_to_use_oauth/
Ir por simple api-key .
Y tome medidas adicionales si existe la necesidad de una solución más segura.
Aquí hay más información, http://blog.apigee.com/detail/do_you_need_api_keys_api_identity_vs._authorization/