Pregunta

Estoy considerando la construcción de una API y estaba considerando la posibilidad de administrar el acceso a la API, pero lo que estoy haciendo es más bien un sistema b2b que permite a las empresas acceder a los datos para incorporarlos en sus sitios. No tendré ningún b2c al principio.

Para que auth no me parezca la herramienta correcta, he estado buscando fuentes para crear un sistema basado en claves, pero no he encontrado nada.

¿Ya hay algo disponible por ahí? ¿Es mejor crear un hash de algunos datos enviados por el usuario o algo así?

¿Fue útil?

Solución

Lo que necesitas es solo algo que identifica de forma única al usuario ... Solo usa un UUID o tal vez un hash de un UUID.

Solo asegúrate de que esta ID se transmita a través de un canal seguro. Si la estás pasando a través de un canal inseguro, es posible que necesites implementar algún método para asegurar la ID similar a la autenticación de resumen HTTP.

Otros consejos

Eche un vistazo a casi cualquier sitio / servicio Web 2.0. Todos ellos tienen diferentes grados de hacer autenticación y gestión de claves API. Flickr, Twitter, Github, etc.

Dependiendo de los requisitos, en el mundo de las API web, darles a sus socios / desarrolladores una clave API (identificación) y exigirles que firmen las llamadas (autenticación) es bastante estándar. Hay muchas maneras de especificar firmas. Una muy común en estos días es; toma todos los parámetros de la llamada, una marca de tiempo (+/- 5 min wiggle), un secreto compartido, y hash con SHA-1 o MD5 (SHA-1 mejor).

Puede implementar esto usted mismo o buscar un socio (hay algunos) para que lo haga por usted.

El enfoque general que se sugiere aquí (para utilizar un hash que incluye una clave de API y la hora actual) es bueno, sin duda mejor que incluir una " contraseña " en el mensaje.

Sin embargo, hay una forma estándar criptográfica de hacer esto " mung " Operación llamada HMAC. Vale la pena verlo si quieres algo más estándar / robusto / seguro.

Finalmente, hay obviamente el " patrón oro " de las opciones de seguridad: use un certificado digital para firmar todas las solicitudes (puede ser costoso computacionalmente) o use para firmar una solicitud inicial que luego genera una clave de sesión de uso limitado (por ejemplo, solo una API, con vencimiento después de 60 minutos).

Alternativamente, podría usar SSL de 2 vías para la capa de transporte y simplemente confiar en eso dentro de la aplicación / API.

Realmente depende de lo seguro que lo quieras ...:]

No solo usaría los datos enviados por el usuario, ya que eso puede crear una situación en la que las claves de API son adivinables. En general, tomo algunos datos que son generados por el usuario y luego los combino con algunos datos que son relativamente únicos (es decir, la hora actual del sistema) y el hash que utiliza SHA-1 o algo así, tal vez cambie la representación si no lo hago. obviamente, desea que sea un hash SHA-1, y luego usarlo como clave.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top