Estoy desarrollando una API REST que requiere autenticación. Debido a que la autenticación en sí ocurre a través de un servicio web externo a través de HTTP, razoné que distribuiríamos tokens para evitar llamar repetidamente al servicio de autenticación. Lo que me lleva a mi primera pregunta:
¿Es esto realmente mejor que simplemente exigir a los clientes que utilicen la autenticación básica HTTP en cada solicitud y el almacenamiento en caché de las llamadas al servicio del servidor de autenticación?
La solución de autenticación básica tiene la ventaja de no requerir un viaje de ida y vuelta completo al servidor antes de que puedan comenzar las solicitudes de contenido. Los tokens pueden ser potencialmente más flexibles en su alcance (es decir, solo otorgar derechos a recursos o acciones particulares), pero eso parece más apropiado para el contexto de OAuth que mi caso de uso más simple.
Actualmente los tokens se adquieren así:
curl -X POST localhost/token --data "api_key=81169d80...
&verifier=2f5ae51a...
×tamp=1234567
&user=foo
&pass=bar"
El api_key
, timestamp
y verifier
son requeridos por todas las solicitudes. El "verificador" es devuelto por:
sha1(timestamp + api_key + shared_secret)
Mi intención es permitir solo llamadas de partes conocidas y evitar que las llamadas se reutilicen textualmente.
¿Es esto lo suficientemente bueno? Underkill? ¿Exceso?
Con un token en la mano, los clientes pueden adquirir recursos:
curl localhost/posts?api_key=81169d80...
&verifier=81169d80...
&token=9fUyas64...
×tamp=1234567
Para la llamada más simple posible, esto parece horriblemente detallado. Teniendo en cuenta que la aplicación shared_secret
terminará incrustada (como mínimo) en una aplicación de iOS, de la cual supongo que se puede extraer, ¿esto incluso ofrece algo más allá de una falsa sensación de seguridad?