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 密钥的主要内容,如果未能解决你的问题,请参考以下文章

保护用于进行 Web Api 调用的 API 密钥

通过 API 创建短链接并获取“API 密钥无效。请传递有效的 API 密钥”

Web API 的静态 api 密钥

控制台中的 Firebase 无效 api 密钥错误

我可以使用 Terraform 创建 GCP API 密钥吗?

使用 api 密钥使用 Web API 时,出现以下错误 - 远程服务器返回错误:(403) Forbidden