Pergunta

Eu estou olhando para construir uma API e estava considerando OAuth para gerenciar o acesso à API, mas o que eu estou fazendo é mais de um sistema B2B permitindo que as empresas de acesso aos dados de incorporar em seus sites. Eu não terá qualquer b2c no início.

Assim OAuth não parece ser a ferramenta certa para mim, eu estive à procura de fontes sobre a construção de um sistema de chave com base, mas não encontrei nada.

Há algo disponível fora já? É melhor apenas criar um hash de alguns dados enviados pelo usuário ou algo parecido?

Foi útil?

Solução

O que você precisa é apenas algo que exclusivamente identifica o usuário ... Basta usar um UUID ou talvez um hash de um UUID.

Apenas certifique-se que este ID é passado através de um canal seguro, se você estiver passando-o sobre um canal inseguro pode ser necessário implementar algum método de assegurar a identificação semelhante ao HTTP digerir auth.

Outras dicas

Dê uma olhada em quase qualquer 2.0 site / serviço da Web. Eles todos têm diferentes graus de fazer auth e gestão de chaves de API. Flickr, Twitter, Github, etc.

Dependendo dos requisitos, no mundo da de API web, dando a seus parceiros / desenvolvedores uma chave de API (identificação) e exigindo que assinar as chamadas (autenticação) é bastante normal. Há muitas maneiras de assinaturas de especificação. A um bastante comum nos dias de hoje é; tomar todos os parâmetros da chamada, um marcador de tempo (+/- 5 min de manobra), um segredo compartilhado, e hash usando SHA-1 ou MD5 (SHA-1 melhor).

Você pode ou não implementar isso sozinho ou encontrar um parceiro (há alguns) para fazer isso por você.

A abordagem geral a ser sugerido aqui (para usar um hash que inclui uma chave de API e do tempo atual) são tudo de bom -. Certamente melhor do que incluindo uma "password" na mensagem

No entanto, há uma maneira padrão de criptografia de fazer esta operação "mung" chamado HMAC. Vale a pena olhar se você quiser algo mais standard / robusta / safe.

Finalmente, há, obviamente, o "padrão ouro" de opções de segurança - usar um certificado digital para assinar quer todos os pedidos (pode ser computacionalmente caro) ou usar para assinar uma solicitação inicial que então gera uma chave de sessão uso limitted (por exemplo, uma API única, com um termo após 60 minutos).

Como alternativa, você poderia usar 2-way SSL para a camada de transporte e simplesmente confiar que dentro do aplicativo / API.

Realmente depende quão seguro você quer que ele ...:]

Eu não apenas utilizar os dados enviados pelos usuários, como que pode criar uma situação onde chaves de API são guessable. Geralmente, eu tomar alguns dados que são gerados pelo usuário e, em seguida, combiná-lo com alguns dados que é relativamente único (ou seja, hora atual do sistema) e hash que usando SHA-1 ou algo assim, talvez mudar a representação se não o fizer quer que ele, obviamente, ser um hash SHA-1, e depois usar isso como a chave.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top