2012-08-06 166 views
48

我有兴趣为web.api创建API密钥,并允许客户端使用API​​密钥与API通信,而不是授权web.api提供。Web API创建API密钥

我希望多个客户端能够与web.api进行通信。而不是创建用户名和密码,我可以使用API​​密钥,并允许客户端与客户端进行通信。

有没有这样的内置功能?

如果你想实现它,你将如何绕过它?

回答

55

您可以通过使用HMAC Authentication来实现。基本上,可能有一个名为ApiKey(apiKey,secretKey)的数据库表。每个客户端都有每个Apikey和密钥:

  1. ApiKey就像一个公钥,将通过HTTP(与用户名类似)发送。

  2. 秘密密钥不是通过HTTP发送的,使用这个秘密密钥来做hmac一些信息并发送散列输出到服务器。从服务器端,基于公钥,你可以得到相关的密钥和散列信息,与散列输出进行比较。

我已经张贴在详细的解答:How to secure an ASP.NET Web API

您可以通过密钥对我的回答改变由ApiKey用户名和散列密码与你的想法映射。

+0

所以你需要客户端在每个API请求上构建哈希表?这里涉及的开销是多少? – EkoostikMartin 2012-08-06 15:41:15

+0

我这么认为,这就是HMAC的工作方式,请您详细说明您的问题吗? – 2012-08-06 15:47:55

+0

如果您要在客户端调用的每种方法上调用ComputeHash(string hashedPassword,string message)',那么每次调用会添加多少时间? 'ComputeHash'平均需要多长时间才能完成? – EkoostikMartin 2012-08-06 15:49:53