asp.net-web-api - 如何保护我的 WebAPI 免受滥用并避免共享 API key ?

标签 asp.net-web-api oauth-2.0 identityserver3 azure-api-management

我有一个用 C# 编写并托管在 Azure 中的 Web API,Azure API 管理 (AAM) 位于该 API 的前面并限制请求。

调用 API 的客户端将基于 javascript,并将代表匿名最终用户进行调用。例如,网站的主页可能会通过 javascript 调用我们的 API 以向最终用户显示信息,而无需他们登录。

AAM 确保 API 的调用者拥有有效的 API key 。如果有人从公开可见的来源获取此 key ,则此 key 有可能被复制和滥用。

是否可以在没有人为干预的情况下使用 OAuth2 获取 JWT 访问 token 并将其暴露在客户端上?

OAuth2 可以发布过期的 JSON Web token ,这将降低 token 被盗的风险,但我正在努力在没有任何人为干预的情况下实现这一目标。

OAuth2 主要是关于最终用户发起的授权,但 IdentityServer3 似乎采用混合方法。我可以使用这种混合方法让远程 Web 服务器通过首先从服务器向服务器发送 API key 然后在网页中输出 JWT 以供客户端脚本使用来请求 token 吗?

这将隐藏 API key 并仅显示使用几分钟的 JWT。

AAM 可以与 OAuth2 集成并检查 JWT 访问 token ,但我认为它不理解这种混合流程(它可能不需要,因为我们不会要求用户登录)。

或者我应该放弃并仅限制请求速率?

最佳答案

如果您可以在没有用户干预的情况下生成这些混合 JWT key ,那么 API 管理可以验证它们并使用其中一个声明作为执行速率限制的 key 。通常速率限制是基于 API 管理订阅 key 完成的,但是新的 advanced rate limiting policies允许您基于任何表达式进行速率限制。

我不熟悉 IdentityServer 混合模式 key 的工作原理,但通常如果有非交互式登录,则需要保护某种 secret 。在客户端上运行代码时,这始终是一个挑战。

API 管理 HTTP API 确实有一个重新生成 key 的方法。您可以使用它来实现您自己的 token 过期机制,以限制 key 盗窃的影响。

关于asp.net-web-api - 如何保护我的 WebAPI 免受滥用并避免共享 API key ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35297196/

相关文章:

asp.net-mvc-4 - ASP.net Web API - 将数组名称添加到输出

c# - Web API 路由被 MVC 忽略和处理

symfony - 使用 oAuth 2 和 FOSOAuthServerBundle 跳过授权页面

authentication - OAuth 流程无需请求用户授权

c# - 无法在身份服务器 3 中获取 token

javascript - IdentityServer3 和 JWT ValidateIssuerSigningKey

c# - Identity Server 3 作为 SharePoint 2013/2016 的 Ws-Fed 身份提供者

asp.net - 如何在 SignalR2 中设置 Json 序列化器设置?

asp.net-core - ASP.NET Core 在通过浏览器访问时看不到图像

Spring OAuth2 需要 PlatformTransactionManager