【发布时间】:2019-06-05 09:07:39
【问题描述】:
在了解 Web API 的性质的同时,提出了一些关于其安全性的问题。设计 Web API 的最佳实践是什么,以便只有授权用户才能访问它。我尝试检查以下选项,但没有一个能够实现完美的安全性。
1) 我不能依赖请求来源、引荐来源或用户代理字符串,因为它们很容易被欺骗。
2) Web API 只需要一个公钥来访问它,因此 CSRF 令牌也不适合实现。
有没有其他方法可以确保请求仅来自受信任的来源?
我的用例是我想实现像谷歌地图这样的客户端 API,任何购买了 API 访问权限的人都会将他们的网站域列入白名单,并且可以在他们的网站上包含我的插件。然后插件将代表用户向我的 API 发出请求。
如果我在 Web API 上应用一些请求签名逻辑,这样我的服务器可以验证请求者并拒绝未经授权的来源,这是个好主意。我假设我必须对我的请求签名逻辑保密,因此我可能需要对代码进行一些混淆。
【问题讨论】:
-
我认为您正在尝试解决 2 个不同的项目:一个是授权,另一个是将域列入白名单。关于授权,您是否考虑过访问令牌 (OAuth)?如今,许多著名的 SaaS 企业都使用它来授权他们的用户(例如 Google、Stripe)。您关于域/源检查的另一个问题是,在没有基于令牌的身份验证机制的情况下,这是一种实际要求还是更多的安全机制?
-
@MoA 在我所说的场景中,公共 API 密钥和请求源域仅意味着授权用户。而且它们都无法防止未经授权的访问。我正在寻找某种方法来确保只有列入白名单的域才能发出请求,而没有其他人可以通过伪造来源或引荐来源标头来发出请求。 OAuth 在这里没用。
标签: api security asp.net-web-api restful-authentication csrf-protection