在 Azure API 管理中只传递 1 个标头而不是授权和 Ocp-Apim-Subscription-Key

发布时间:2021-03-03 10:13

我的 API 很少Azure API 管理。我需要 Azure 检查有效的订阅,但同时我需要一些用于授权和身份验证的标头值。现在客户端提出了 OAuth 2.0 必须存在的要求。现在我们有 1 个订阅密钥标头 (Ocp-Apim-Subscription-Key)、我需要的 2 个标头(如 LocationCodeApplicationKey)和 1 个授权标头(Bearer token 来自 AD)。

我需要一个解决方案,即只有 1 个标头,并且所有这些标头都必须从中派生。有人对如何实现它有任何建议吗?

到目前为止我所尝试的是我已经从我的代码中生成了一个 JWT 并将订阅密钥和其他标题添加到其中,但我无法传递订阅密钥。我不是政策编辑的专家,但如果有人可以提供帮助,那么它可能是可以实现的..

我们是否可以在 OAuth 访问令牌中添加一些自定义标头,该令牌可以通过应用注册从 Azure AD 生成?

提前致谢!!

回答1

您可以将 LocationCodeApplicationKey 作为自定义声明包含在您的 JWT 中(参考 this SO post 很好地涵盖了这些步骤)。

但订阅密钥必须位于标题或查询字符串中,以便 APIM 考虑它。因此,您可以使用这种方法将标题从四个减少到两个。

您可以将其归结为一种方法是将 SubscriptionKey 也作为声明,但使用代理(也可能是另一个 APIM 操作)从声明中提取密钥,然后调用需要它的实际 API。 但考虑到订阅密钥是一个秘密,这是不可取的。