json - seguridad - jwt
¿Cómo manejan las personas la autenticación para api RESTful(tecnología agnóstica) (2)
Estoy buscando construir algunas aplicaciones móviles. Por lo tanto, estas aplicaciones ''hablarán'' a mi servidor a través de JSON y a través de REST (por ejemplo, poner, publicar, etc.).
Si quiero asegurarme de que la aplicación del teléfono del cliente está tratando de hacer algo que requiera un cierto "permiso", ¿cómo las personas manejan esto?
Por ejemplo:
Nuestro sitio web vende cosas -> televisores, automóviles, vestidos, etc. La API permitirá a las personas navegar por la tienda y comprar artículos. Para comprar, debe estar ''conectado''. Necesito asegurarme de que la persona que está usando su teléfono móvil sea realmente ellos.
¿Cómo puede hacerse esto?
He echado un vistazo a cómo Twitter lo hace con su OAuth ... y parece que tienen una serie de valores en un ENCUESTADOR DE PETICIONES. Si es así (y me gusta este enfoque), ¿es posible que pueda usar otro tercero como el sitio web para almacenar el nombre de usuario / contraseña (por ejemplo, Twitter o Facebook son los proveedores de OAuth) ... y todo lo que hago es recuperar de alguna manera los datos del encabezado personalizado ... y asegúrese de que existan en mi db .. else ... ¿conseguir que se autentiquen con su proveedor de OAuth?
¿O hay otra manera?
PD. Realmente no me gusta la idea de tener una clave API. Siento que se puede entregar con demasiada facilidad a otra persona, para usarla (lo cual no podemos correr el riesgo).
Como los servicios RESTful utilizan llamadas HTTP, puede retransmitir en Autenticación básica HTTP por motivos de seguridad. Es simple, directo y ya es compatible con el protocolo; y si no desea una seguridad adicional en el transporte, puede usar SSL. Los productos bien establecidos como IBM Websphere Process Server utilizan este enfoque.
La otra forma es construir su propio marco de seguridad de acuerdo a las necesidades de su aplicación. Por ejemplo, si desea que su servicio solo sea consumido por ciertos dispositivos, necesitará quizás enviar un token codificado como un encabezado sobre el cable para verificar que la solicitud provenga de una fuente autorizada. Amazon tiene una forma interesante de hacerlo, puedes consultarlo aquí .
Nuestro sitio web vende cosas -> televisores, automóviles, vestidos, etc. La API permitirá a las personas navegar por la tienda y comprar artículos. Para comprar, debe estar ''conectado''. Necesito asegurarme de que la persona que está usando su teléfono móvil sea realmente ellos.
Si esto realmente es un requisito, entonces necesita almacenar identidades de usuario en su sistema. La forma más popular de rastreo de identidad es a través de nombre de usuario y contraseña.
He echado un vistazo a cómo Twitter lo hace con su OAuth ... y parece que tienen una serie de valores en un ENCUESTADOR DE PETICIONES. Si es así (y me gusta este enfoque), ¿es posible que pueda usar otro tercero como el sitio web para almacenar el nombre de usuario / contraseña (por ejemplo, Twitter o Facebook son los proveedores de OAuth) ... y todo lo que hago es recuperar de alguna manera los datos del encabezado personalizado ... y asegúrese de que existan en mi db .. else ... ¿conseguir que se autentiquen con su proveedor de OAuth?
Estás confundiendo dos tecnologías diferentes aquí, OpenID y OAuth (no te sientas mal, muchas personas se tropiezan con esto). OpenID le permite diferir el seguimiento y la autenticación de identificación a un proveedor , y luego aceptar estas identidades en su aplicación, como el aceptante o parte confiante . OAuth, por otro lado, permite que una aplicación (consumidor) acceda a datos de usuario que pertenecen a otra aplicación o sistema, sin comprometer la seguridad básica de otras aplicaciones. Podrías defender a OAuth si quisieras que los desarrolladores externos accedan a tu API en nombre de tus usuarios (lo cual no es algo que hayas declarado que quieres hacer).
Para sus requisitos establecidos, definitivamente puede echar un vistazo a la integración de Open ID en su aplicación. Hay muchas bibliotecas disponibles para la integración, pero como pidió una respuesta agnóstica, no voy a enumerar ninguna de ellas.
¿O hay otra manera?
Por supuesto. Puede almacenar id de usuario en su sistema y usar autenticación básica o resumida para asegurar su API. La autenticación básica requiere solo un encabezado adicional (fácilmente calculado) en sus solicitudes:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Si usa autenticación básica o digestiva, asegúrese de que sus puntos finales API estén protegidos con SSL, ya que de lo contrario las credenciales del usuario se pueden detectar fácilmente por aire. También podría ir a la identificación del usuario y, en su lugar, autenticar al usuario de manera efectiva al pagar a través de la información de la tarjeta de crédito, pero eso es una decisión.