Melhor abordagem para gerar a chave da API
cada serviço tem uma chave API, como:
AIzaSyClzfrOzB818x55FASHvX4JuGQciR9lv7q
todas as chaves variam em comprimento e os caracteres que contêm, pergunto-me qual é a melhor abordagem para gerar uma chave API?
não estou a pedir uma linguagem específica, apenas a abordagem geral para criar chaves, se elas forem uma encriptação dos detalhes do aplicativo de utilizadores, ou um hash, ou um hash de um aleatório string, etc. Devemos nos preocupar com o algoritmo de hash (MSD, SHA1, bcrypt) etc?
editar: Eu falei com alguns amigos (e-mail/twitter) e eles recomendaram apenas usar um GUID com os traços despojados.
Isto parece-me um pouco estranho, na esperança de ter mais ideias.5 answers
Utilize um gerador de números aleatórios concebido para criptografia. Então base-64 codificar o número.
Este é um exemplo C#:
var key = new byte[32];
using (var generator = RandomNumberGenerator.Create())
generator.GetBytes(key);
string apiKey = Convert.ToBase64String(key);
As teclas API precisam de ter as propriedades que eles:
- identificar exclusivamente um utilizador autorizado da API -- a parte " chave "da" chave da API "
- autenticar esse utilizador -- não se pode adivinhar / falsificar
- pode ser revogado se um utilizador se comportar mal -- normalmente eles entram numa base de dados que pode ter um registo apagado.
Normalmente você terá milhares ou milhões de chaves API não bilhões, então eles não precisam:
- Guardar de forma fiável informações sobre a API usuário porque isso pode ser armazenado em sua base de dados.
Como tal, uma maneira de gerar uma chave de API é tirar duas informações:
- um número de série para garantir a unicidade
- bits aleatórios suficientes para apagar a chave
Um bom gerador de GUID é uma boa aproximação de um contador incrementado se você precisa gerar chaves de vários centros de dados ou não tem uma boa maneira distribuída para atribuir números de série.
O chicote não impede a falsificação. Assinar é o que garante que a chave veio de ti.Ou um haxixe de uma cadeia Aleatória
Uso UUIDs, formatados em minúsculas sem erupções cutâneas.
A geração é fácil, já que a maioria das línguas A tem incorporada.
As chaves de API podem ser comprometidas, caso em que um utilizador pode querer cancelar a sua chave de API e gerar uma nova, por isso o seu método de geração de chaves deve ser capaz de satisfazer este requisito.
Uma Chave API deve ser um valor aleatório. Aleatório o suficiente para não poder ser previsto. Ele não deve conter quaisquer detalhes do usuário ou conta que é para. Usar UUIDs é uma boa idéia, se você tem certeza de que os IDs criados são aleatórios.
As versões anteriores do Windows produziram guias previsíveis, por exemplo, mas esta é uma história antiga.Se quiser uma tecla API com apenas caracteres alfanuméricos, poderá usar uma variante da abordagem base64-random , usando apenas uma codificação base-62 em alternativa. O codificador base-62 é baseado em Este .
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();
}