如何限制对 Web API 2 应用程序中已知客户端应用程序的 API 访问?
Posted
技术标签:
【中文标题】如何限制对 Web API 2 应用程序中已知客户端应用程序的 API 访问?【英文标题】:How do I limit API access to known client applications in a Web API 2 application? 【发布时间】:2014-08-18 20:54:11 【问题描述】:我创建了一个由三个主要组件组成的应用程序:
-
提供多个 WebApiControllers 的 .NET Web Api 2 项目。某些方法,例如“注册”,对匿名访问开放,而其他方法则使用基于令牌的基本授权(.Net WebApi2 模板中包含的标准 .Net Identity 2 方法)进行授权。为了方便快捷的功能,这一层使用实体框架直接与我的数据库通信。
提供前端 Web 客户端并与 Web API 通信的 MVC5 项目。
与 Web API 通信的 ios 客户端。
通过这种结构,最终用户(“消费者”)可以使用未经身份验证的“注册”API 方法创建自己的帐户。然后,用户可以通过受基于令牌的授权标头保护的经过身份验证的方法访问和操作自己的数据。
这是我的问题:
如何防止未知客户端调用 API,而不会产生大量开销或彻底检查标准 .Net Web API 授权功能?
理想情况下,我希望能够为客户端应用程序提供某种标识符表,以便我可以允许新的客户端应用程序或在必要时禁止它们。
【问题讨论】:
限制访问通常在授权过滤器中完成,这将装饰您的控制器。在过滤器实施中,您可以检查标头中的令牌并可能使用以下命令拒绝请求: actionContext.Response = actionContext.Request.CreateResponse(HttpStatusCode.Unauthorized); 我已经在使用授权过滤器对特定 API 方法进行正常的用户级身份验证,但这并没有为我提供一层保护来阻止未经授权的客户端。本质上,现在任何用户都可以直接调用 API 来创建帐户并操作自己的数据。我特别担心人们调用 Register 方法(它必须允许匿名用户以便个人可以创建帐户)并向该方法发送垃圾邮件以创建大量虚假帐户(我可以区分这些,因为我使用的是电子邮件确认,但我不想要 DDoS 攻击)。 在这种情况下,您可以将尝试存储在具有滑动到期(例如 1 分钟)的 WebCache 中,并将会话标识符作为键。在每次尝试之前,您将检查最后一分钟发生了多少次尝试,如果超过阈值,您将停止执行注册。 我也有同样的问题,正在寻找答案?? 【参考方案1】:查看 Active Directory 清单中的 knownClientApplications 参数。 https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-application-manifest
【讨论】:
以上是关于如何限制对 Web API 2 应用程序中已知客户端应用程序的 API 访问?的主要内容,如果未能解决你的问题,请参考以下文章
Spring Security OAUTH2 - 如何根据客户端 ID 限制对 API 的访问?