我可以使用 OAuth 令牌替代 Ocp-Apim-Subscription-Key 吗?
Can I use OAuth Token as an alternative to Ocp-Apim-Subscription-Key?
我正在考虑使用 Azure API 管理为多个后端 API 提供一致的前端。
大多数 API 都使用 OAuth 2.0 应用程序流程(ClientID + Client Secret,后端 API 检查 claims/scopes)进行保护。这很好用,但是当客户通过 APIM 使用这些 APIs 时,他们需要提供一个 APIM 订阅密钥 和 一个 OAuth 2.0令牌。我了解 APIM 订阅密钥用于将客户端标识为 APIM(用于速率限制、日志记录等目的),令牌用于后端 authentication/authorization.
有没有什么方法可以使用客户端 ID 来替代 APIM 订阅密钥?也就是说,客户端不需要提供 APIM 订阅密钥,并且 OAuth 2.0 令牌身份用于所有 APIM 功能(例如,通过客户端 ID 限制速率)。
无法使用 OAuth 令牌来识别客户端,但您可以将其用于 rate-limiting 和日志记录(各种)。从创建不需要订阅的新产品开始,添加到该产品的任何 API 都可以匿名访问。为了解决这个问题,您可以在该产品上放置 validate-jwt 政策以要求 OAuth 令牌并检查它的声明,或者如果您真的不关心令牌内容只是想知道它在那里,您可以使用 check-header政策。
使用策略表达式,您可以执行 context.Headers.GetValueOrDefault("Authorization").AsJwt() 将提供的 header 解析为 JWT object 模型,检查其声明,并使用它在 rate-limit-by-key 和 quota-by-key 策略中实现每个客户端的节流。
要使日志记录工作,目前没有其他方法,只能依靠 log-to-eventhub 策略并自己记录必要的信息。这确实意味着您需要维护 EventHub 实例和进一步的基础设施以从中读取记录并将它们存储在某个地方。一些变化正在扩大日志记录功能,这将使这更容易。
我正在考虑使用 Azure API 管理为多个后端 API 提供一致的前端。
大多数 API 都使用 OAuth 2.0 应用程序流程(ClientID + Client Secret,后端 API 检查 claims/scopes)进行保护。这很好用,但是当客户通过 APIM 使用这些 APIs 时,他们需要提供一个 APIM 订阅密钥 和 一个 OAuth 2.0令牌。我了解 APIM 订阅密钥用于将客户端标识为 APIM(用于速率限制、日志记录等目的),令牌用于后端 authentication/authorization.
有没有什么方法可以使用客户端 ID 来替代 APIM 订阅密钥?也就是说,客户端不需要提供 APIM 订阅密钥,并且 OAuth 2.0 令牌身份用于所有 APIM 功能(例如,通过客户端 ID 限制速率)。
无法使用 OAuth 令牌来识别客户端,但您可以将其用于 rate-limiting 和日志记录(各种)。从创建不需要订阅的新产品开始,添加到该产品的任何 API 都可以匿名访问。为了解决这个问题,您可以在该产品上放置 validate-jwt 政策以要求 OAuth 令牌并检查它的声明,或者如果您真的不关心令牌内容只是想知道它在那里,您可以使用 check-header政策。
使用策略表达式,您可以执行 context.Headers.GetValueOrDefault("Authorization").AsJwt() 将提供的 header 解析为 JWT object 模型,检查其声明,并使用它在 rate-limit-by-key 和 quota-by-key 策略中实现每个客户端的节流。
要使日志记录工作,目前没有其他方法,只能依靠 log-to-eventhub 策略并自己记录必要的信息。这确实意味着您需要维护 EventHub 实例和进一步的基础设施以从中读取记录并将它们存储在某个地方。一些变化正在扩大日志记录功能,这将使这更容易。