看着谷歌,找不到任何东西。用API密钥开发服务(起点)
任何良好的资源开始设计我的后端的RESTless Web应用程序将严重依赖API密钥。
我知道如何编写不安定的web服务等,只是从来没有使用API密钥。通常人们只是为用户生成指导等等?
看着谷歌,找不到任何东西。用API密钥开发服务(起点)
任何良好的资源开始设计我的后端的RESTless Web应用程序将严重依赖API密钥。
我知道如何编写不安定的web服务等,只是从来没有使用API密钥。通常人们只是为用户生成指导等等?
GUID通常不是“随机”的,并且很容易被坏人猜出。
采取一些“随机”数据,如用户的密码散列,一些随机数,并通过sha1或类似的散列函数运行结果。
如果您想为每个帐户使用一个API密钥,只需将其添加到帐户元数据表即可。否则,使用链接到accountIds的表来存储API密钥。
服务器端使用api-key作为临时存储帐户元数据的密钥,因此您只需在每个会话中转到一次db。
当然,所有事情都必须通过https来避免API密钥被盗。
现在,如果您的服务是面向“会话”的,您可以考虑使用临时会话密钥,因此您不需要公开API密钥。寻找公钥加密来进一步调查。
下面是我如何创建API密钥的Web服务:
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;
}
“GUID是通常不是随机的不够,可以很容易地猜到”?我不确定我是否同意这一点。 http://stackoverflow.com/questions/184869/are-guid-collisions-possible – toxaq 2015-01-17 04:47:06
部分GUID与机器相关,通常是IP或MAC地址,一天中的时间,生成UID的对象的地址,序列计数器。这使得在正常使用情况下生成相同ID的天文数字不太可能。然而,想要创建冲突的攻击者可以使用另一个GUID来确定公共位,并猜测“变化”位,这是一个相对较小的子集,它更容易暴力破解。其实你提到的问题的答案,很好地说明了这一点。 – 2015-01-18 15:13:46
虽然我不相信UUID v4仍然如此,但它应该完全是“随机的”,并且是应该使用的。你的假设是一个GUID不适合API密钥? – toxaq 2015-01-18 21:41:27