Asp.net web api 如何保护我的WebAPI不被滥用并避免共享API密钥?

Asp.net web api 如何保护我的WebAPI不被滥用并避免共享API密钥?,asp.net-web-api,oauth-2.0,identityserver3,azure-api-management,Asp.net Web Api,Oauth 2.0,Identityserver3,Azure Api Management,我有一个用C#编写的Web API,托管在Azure中,Azure API管理(AAM)位于该API前面并限制请求 调用API的客户端将基于javascript,并将代表匿名最终用户进行调用。例如,web站点的主页可能会通过javascript调用我们的API,向最终用户提供信息,而不要求他们登录 AAM确保API的调用方具有有效的API密钥。如果有人从公开可见的来源获取该密钥,则该密钥有可能被复制和滥用 是否可以使用OAuth2在无需人工干预的情况下获取JWT访问令牌,并在客户端公开该令牌?

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

调用API的客户端将基于javascript,并将代表匿名最终用户进行调用。例如,web站点的主页可能会通过javascript调用我们的API,向最终用户提供信息,而不要求他们登录

AAM确保API的调用方具有有效的API密钥。如果有人从公开可见的来源获取该密钥,则该密钥有可能被复制和滥用

是否可以使用OAuth2在无需人工干预的情况下获取JWT访问令牌,并在客户端公开该令牌?

OAuth2可以发布过期的JSON Web令牌,这将降低令牌被盗的风险,但我很难在没有任何人为干预的情况下实现这一点

OAuth2主要是关于最终用户发起的授权,但IdentityServer3似乎有一种混合方法。我是否可以使用这种混合方法让远程web服务器请求令牌,方法是首先将API密钥从服务器发送到服务器,然后在网页中输出JWT供客户端脚本使用

这将隐藏API密钥,并且只显示一个使用了几分钟的JWT

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


或者我应该只放弃和速率限制请求吗?

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

我不熟悉IdentityServer混合模式密钥是如何工作的,但通常情况下,如果存在非交互式登录,则需要保护某种秘密。在客户端上运行代码时,这始终是一个挑战


API管理HTTP API确实有重新生成密钥的方法。您可以使用它来实现自己的令牌到期机制,以限制密钥被盗的影响。

因为API用于主页上的匿名用户,所以是否需要API密钥?也就是说,它只是一个公共API,尽管您有能力通过AAM对限制进行评级。对于secret API的使用OAuth2。@MarvinRounce需要API密钥来执行默认的速率限制。API可能有多个用户,订阅密钥用于跟踪使用情况。