使用API​​密钥开发服务(起点)

时间:2011-06-04 07:58:00

标签: api rest api-key

在谷歌上看,找不到任何东西。

开始为RESTless webapp设计我的后端的任何好资源都会严重依赖API密钥。

我知道如何编写不安分的webservices等,从未使用过API密钥。一般来说,人们只为用户生成guid等吗?

2 个答案:

答案 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密钥。寻找公钥加密来进一步调查。