在谷歌上看,找不到任何东西。
开始为RESTless webapp设计我的后端的任何好资源都会严重依赖API密钥。
我知道如何编写不安分的webservices等,从未使用过API密钥。一般来说,人们只为用户生成guid等吗?
答案 0 :(得分:4)
以下是我为Web服务创建API密钥的方法:
string CreateApiKey(int length)
{
var bytes = new byte[length * 2];
using (var rng = new RNGCryptoServiceProvider())
rng.GetBytes(bytes);
var chars = Convert.ToBase64String(bytes)
.Where(char.IsLetterOrDigit)
.Take(length)
.ToArray();
var key = new String(chars);
return key;
}
答案 1 :(得分:2)
GUID通常不够“随机”,很容易被坏人猜到。
获取一些“随机”数据,如用户的密码哈希,一些随机数,并通过sha1或类似的哈希函数运行结果。
如果您希望每个帐户使用一个API密钥,只需将其添加到帐户元数据表即可。否则,使用链接到accountIds的表来存储api密钥。
服务器端使用api-key作为临时存储帐户元数据的密钥使用缓存,因此您只需要在每个会话中转到db一次。
当然,所有内容都必须通过https来避免API密钥被盗。
现在,如果您的服务是“面向会话”,您可以考虑使用临时会话密钥,这样您就不需要公开API密钥。寻找公钥加密来进一步调查。