security - gratis - google maps api key free
El mejor enfoque para generar API Key (5)
Así que ahora hay muchos servicios diferentes, API de Google, API de Twitter, API de Facebook, etc.
Cada servicio tiene una clave API, como:
AIzaSyClzfrOzB818x55FASHvX4JuGQciR9lv7q
Todas las claves varían en longitud y en los caracteres que contienen. Me pregunto cuál es el mejor enfoque para generar una clave API.
No estoy pidiendo un lenguaje específico, solo el enfoque general para crear claves, si se tratara de un cifrado de detalles de la aplicación de los usuarios, o un hash, o un hash de una cadena aleatoria, etc. ¿Deberíamos preocuparnos por el algoritmo hash? (MSD, SHA1, bcrypt) etc.?
Editar: He hablado con algunos amigos (correo electrónico / twitter) y me recomendaron usar un GUID con los guiones despojados.
Esto me parece un poco raro, con la esperanza de obtener algunas ideas más.
Las claves de API deben tener las propiedades que:
- identificar de manera única a un usuario API autorizado: la parte "clave" de la "clave API"
- autenticar a ese usuario - no se puede adivinar / falsificar
- puede revocarse si un usuario se comporta mal: generalmente ingresan en una base de datos que puede tener un registro eliminado.
Normalmente, tendrá miles o millones de claves API, no miles de millones, por lo que no es necesario que:
- Almacene de manera confiable información sobre el usuario de API porque eso se puede almacenar en su base de datos.
Como tal, una forma de generar una clave API es tomar dos piezas de información:
- un número de serie para garantizar la singularidad
- suficientes bits aleatorios para rellenar la llave
y firmarlos usando un secreto privado.
El contador garantiza que identifican de manera única al usuario y la firma evita la falsificación. La revocabilidad requiere verificar que la clave aún sea válida en la base de datos antes de hacer algo que requiera la autorización de la clave API.
Un buen generador de GUID es una buena aproximación de un contador incrementado si necesita generar claves desde múltiples centros de datos o si no tiene una buena forma distribuida para asignar números de serie.
o un hash de una cadena aleatoria
Hashing no evita la falsificación. Signing es lo que garantiza que la clave vino de usted.
Si desea una clave API con solo caracteres alfanuméricos, puede usar una variante del enfoque base64-random , solo usando una codificación base-62 en su lugar. El codificador de base 62 se basa en this .
public static string CreateApiKey()
{
var bytes = new byte[256 / 8];
using (var random = RandomNumberGenerator.Create())
random.GetBytes(bytes);
return ToBase62String(bytes);
}
static string ToBase62String(byte[] toConvert)
{
const string alphabet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
BigInteger dividend = new BigInteger(toConvert);
var builder = new StringBuilder();
while (dividend != 0) {
dividend = BigInteger.DivRem(dividend, alphabet.Length, out BigInteger remainder);
builder.Insert(0, alphabet[Math.Abs(((int)remainder))]);
}
return builder.ToString();
}
Una clave API debe ser un valor aleatorio. Lo suficientemente aleatorio como para que no pueda predecirse. No debe contener ningún detalle del usuario o la cuenta para la que es. Usar UUID es una buena idea, si está seguro de que los ID creados son aleatorios.
Las versiones anteriores de Windows producían GUID predecibles, por ejemplo, pero esta es una historia antigua.
Use un generador de números aleatorios diseñado para criptografía. Entonces base-64 codifica el número.
Este es un ejemplo de C #:
var key = new byte[32];
using (var generator = RandomNumberGenerator.Create())
generator.GetBytes(key);
string apiKey = Convert.ToBase64String(key);
Yo uso UUID, formateado en minúsculas sin guiones.
La generación es fácil ya que la mayoría de los lenguajes lo tienen incorporado.
Las claves API pueden verse comprometidas, en cuyo caso un usuario puede querer cancelar su clave API y generar una nueva, por lo que su método de generación de claves debe ser capaz de satisfacer este requisito.