【发布时间】:2012-08-03 13:05:32
【问题描述】:
我有兴趣为 web.api 创建 API 密钥并允许客户端使用 API 密钥而不是 web.api 提供的授权与 API 通信。
我希望多个客户端能够与 web.api 进行通信。我可以使用 api 密钥代替创建用户名和密码,并允许客户端与客户端通信。
有这样的内置功能吗?
如果有人想实现它,你会如何绕过它?
【问题讨论】:
标签: c# asp.net-web-api api-key
我有兴趣为 web.api 创建 API 密钥并允许客户端使用 API 密钥而不是 web.api 提供的授权与 API 通信。
我希望多个客户端能够与 web.api 进行通信。我可以使用 api 密钥代替创建用户名和密码,并允许客户端与客户端通信。
有这样的内置功能吗?
如果有人想实现它,你会如何绕过它?
【问题讨论】:
标签: c# asp.net-web-api api-key
您可以通过使用HMAC Authentication 来实现。基本上,可能有一个名为 ApiKey (apiKey, secretKey) 的数据库表。每个客户端都有各自的 Apikey 和 secret Key:
ApiKey 类似于公钥,将通过 HTTP 发送(与用户名类似)。
Secret Key 不是通过 HTTP 发送的,使用这个密钥来做 hmac 一些信息并将散列输出发送到服务器。从服务器端,根据公钥,可以得到相关的秘钥和哈希信息,与哈希输出进行比较。
我已将详细答案发布在:How to secure an ASP.NET Web API
您可以在我的答案中通过 ApiKey 更改用户名和通过密钥更改哈希密码,以映射您的想法。
【讨论】:
ComputeHash(string hashedPassword, string message),那么每次调用会增加多少时间? ComputeHash 平均需要多长时间才能完成?