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 claramente a mi primera pregunta:API REST Autenticación basada en token
¿Es esto realmente mejor que solo requerir que los clientes utilicen HTTP Basic Auth en cada solicitud y que el caché llame al servicio de autenticación del servidor?
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 las solicitudes de contenido puedan comenzar. Los tokens pueden ser potencialmente más flexibles en su alcance (es decir, solo otorgan 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.
fichas Actualmente se adquieren de esta manera:
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" se devuelve por:
sha1(timestamp + api_key + shared_secret)
Mi intención es permitir sólo llamadas de personas conocidas, y para evitar las llamadas de ser reutilizados pie de la letra.
¿Es esto lo suficientemente bueno? Underkill? ¿Overkill?
con una ficha 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 algo terriblemente detallado. Teniendo en cuenta que el shared_secret
terminará siendo incrustado (como mínimo) en una aplicación de iOS, de la que asumiría que se puede extraer, ¿esto ofrece algo más allá de una falsa sensación de seguridad?
En lugar de utilizar SHA1 (marca de tiempo api_key + + shard_secret) se debe utilizar HMAC (shared_secret, timpestamp + api_key) para una mejor seguridad de hash http://en.wikipedia.org/wiki/Hash- based_message_authentication_code –
@ MiguelA.Carrasco Y parece ser el consenso en 2017 que bCrypt es la nueva herramienta de hash. –