gpt4 book ai didi

asp.net - 网络 API : Basic Authentication or HMAC over SSL?

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:53 25 4
gpt4 key购买 nike

我想保护 .NET Web API 服务。我将使用 SSL,但我还需要根据用户的权限限制每个用户可以调用的 Web API 调用。

根据我的阅读,REST/HTTP 应该是无状态的,因此从技术上讲,您不应该能够维护任何 session 状态,但是有 some ways围绕那个。

一种是使用basic authentication .凭据随每个请求一起发送。虽然这在安全方面可能没问题,因为无论如何它们都是通过 SSL 传输的,但它确实不切实际,因为每次都需要大量开销来对数据库重新进行身份验证。 (一种可能是将它们缓存在内存中,但我怀疑这是最好的方法。)

另一个可能是使用 HMAC ( example implementation ) 来控制对 API 调用的访问。这个article里面有评论上面写着:

Just to be clear to people that are implementing this on their HTTPS services: YOU DON'T NEED TO IMPLEMENT HMAC ON SSL!!! It's a waste of time and waste of complexity for absolutely no reason. DON'T DO IT. Use Basic Auth and be done with it.

基于上述原因我不同意这一点(验证一次并使用HMAC进行控制比每次验证更实用)。

在通过 SSL 工作时使用 HMAC 为 Web API 调用提供安全性是否是一种良好且有效的做法,或者我是否遗漏了任何要点?

最佳答案

答案取决于您对安全的关注程度。

此 API 的用途是什么?如果安全是一个大问题,基本身份验证不是一个足够好的选择——即使您使用的是 SSL。

即使您使用的是 SSL,可以控制或访问您的初始请求的攻击者也可以伪装成所需的 HTTPS 网络服务,并轻松拦截您的流量(然后获取您的 API 凭据)。

一个更好的解决方案是做几件事:

  • 使用 API key 和 secret 。
  • 为每个请求生成一个唯一 ID。
  • 为每个请求生成一个时间戳。
  • 根据您的 API key 加密您的请求正文。
  • 将加密输出放入 HTTP_AUTHORIZATION header 中,格式为:API_KEY_ID:<encrypted_output>
  • 在服务器端,解密负载。
  • 比较时间戳 - 如果请求发送时间超过一秒 - 将其丢弃(这可以防止计时攻击)。
  • 比较唯一 ID - 如果此请求已执行 - 将其丢弃(这可以防止重放攻击)。

上述策略使攻击者无法访问您的 API 凭据,即使他们能够成功地在您的 API 调用中进行中间人攻击也是如此。

关于asp.net - 网络 API : Basic Authentication or HMAC over SSL?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22842516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com