3

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

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

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

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

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

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

然后,这将隐藏 API 密钥并仅显示使用几分钟的 JWT。

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

还是我应该只放弃和速率限制请求?

4

1 回答 1

2

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

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

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

于 2016-02-10T14:56:09.967 回答