我的 API 很少Azure API 管理。我需要 Azure 检查有效的订阅,但同时我需要一些用于授权和身份验证的标头值。现在客户端提出了 OAuth 2.0 必须存在的要求。现在我们有 1 个订阅密钥标头 (Ocp-Apim-Subscription-Key
)、我需要的 2 个标头(如 LocationCode
、ApplicationKey
)和 1 个授权标头(Bearer token
来自 AD)。
我需要一个解决方案,即只有 1 个标头,并且所有这些标头都必须从中派生。有人对如何实现它有任何建议吗?
到目前为止我所尝试的是我已经从我的代码中生成了一个 JWT 并将订阅密钥和其他标题添加到其中,但我无法传递订阅密钥。我不是政策编辑的专家,但如果有人可以提供帮助,那么它可能是可以实现的..
我们是否可以在 OAuth 访问令牌中添加一些自定义标头,该令牌可以通过应用注册从 Azure AD 生成?
提前致谢!!
您可以将 LocationCode
和 ApplicationKey
作为自定义声明包含在您的 JWT 中(参考 this SO post 很好地涵盖了这些步骤)。
但订阅密钥必须位于标题或查询字符串中,以便 APIM 考虑它。因此,您可以使用这种方法将标题从四个减少到两个。
您可以将其归结为一种方法是将 SubscriptionKey
也作为声明,但使用代理(也可能是另一个 APIM 操作)从声明中提取密钥,然后调用需要它的实际 API。 但考虑到订阅密钥是一个秘密,这是不可取的。