Web API 创建 API 密钥
Posted
技术标签:
【中文标题】Web API 创建 API 密钥【英文标题】:Web API creating API keys 【发布时间】:2012-08-03 13:05:32 【问题描述】:我有兴趣为 web.api 创建 API 密钥并允许客户端使用 API 密钥而不是 web.api 提供的授权与 API 通信。
我希望多个客户端能够与 web.api 进行通信。我可以使用 api 密钥代替创建用户名和密码,并允许客户端与客户端通信。
有这样的内置功能吗?
如果有人想实现它,你会如何绕过它?
【问题讨论】:
【参考方案1】:您可以通过使用HMAC Authentication 来实现。基本上,可能有一个名为 ApiKey (apiKey, secretKey) 的数据库表。每个客户端都有各自的 Apikey 和 secret Key:
ApiKey 类似于公钥,将通过 HTTP 发送(与用户名类似)。
Secret Key 不是通过 HTTP 发送的,使用这个密钥来做 hmac 一些信息并将散列输出发送到服务器。从服务器端,根据公钥,可以得到相关的秘钥和哈希信息,与哈希输出进行比较。
我已将详细答案发布在:How to secure an ASP.NET Web API
您可以在我的答案中通过 ApiKey 更改用户名和通过密钥更改哈希密码,以映射您的想法。
【讨论】:
所以你会要求客户端在每个 API 请求上构建哈希?这里涉及的开销是多少? 我想是的,这就是 HMAC 的工作方式,请您详细说明您的问题吗? 如果您在客户端调用的每个方法上都调用ComputeHash(string hashedPassword, string message)
,那么每次调用会增加多少时间? ComputeHash
平均需要多长时间才能完成?
没什么,不到一毫秒。所以几乎没有开销,非常好。
获取用户的密钥一直是个难题。您可以使用 2 步过程:通过 ssl 将散列 + 加盐密码(连同盐)发送到服务,并让服务发回关联的密钥。未来的交易使用(散列+加盐)密钥而不是密码。您也可以通过这种方式使用密码重置令牌。以上是关于Web API 创建 API 密钥的主要内容,如果未能解决你的问题,请参考以下文章
通过 API 创建短链接并获取“API 密钥无效。请传递有效的 API 密钥”