【问题标题】:Web API creating API keysWeb API 创建 API 密钥
【发布时间】:2012-08-03 13:05:32
【问题描述】:

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

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

有这样的内置功能吗?

如果有人想实现它,你会如何绕过它?

【问题讨论】:

    标签: c# asp.net-web-api api-key


    【解决方案1】:

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

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

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

    我已将详细答案发布在:How to secure an ASP.NET Web API

    您可以在我的答案中通过 ApiKey 更改用户名和通过密钥更改哈希密码,以映射您的想法。

    【讨论】:

    • 所以你会要求客户端在每个 API 请求上构建哈希?这里涉及的开销是多少?
    • 我想是的,这就是 HMAC 的工作方式,请您详细说明您的问题吗?
    • 如果您在客户端调用的每个方法上都调用ComputeHash(string hashedPassword, string message),那么每次调用会增加多少时间? ComputeHash 平均需要多长时间才能完成?
    • 没什么,不到一毫秒。所以几乎没有开销,非常好。
    • 获取用户的密钥一直是个难题。您可以使用 2 步过程:通过 ssl 将散列 + 加盐密码(连同盐)发送到服务,并让服务发回关联的密钥。未来的交易使用(散列+加盐)密钥而不是密码。您也可以通过这种方式使用密码重置令牌。
    猜你喜欢
    • 1970-01-01
    • 2016-09-12
    • 2020-04-15
    • 2018-09-01
    • 2018-03-15
    • 1970-01-01
    • 2018-01-29
    • 2017-02-26
    • 2023-03-28
    相关资源
    最近更新 更多