我正在考虑使用Azure API Management为许多后端API提供一致的前端。
大多数API使用OAuth 2.0应用程序流(ClientID + Client Secret,使用后端API检查声明/范围)进行保护。这很有效,但是当客户端通过APIM使用这些API时,他们需要提供APIM订阅密钥和 OAuth 2.0令牌。我了解APIM订阅密钥用于将客户端标识为APIM(用于速率限制,日志记录等),并且令牌用于后端身份验证/授权。
是否有任何方法可以将客户端ID用作APIM订阅密钥的替代方案?也就是说,客户端不需要提供APIM订阅密钥,并且OAuth 2.0令牌身份用于所有APIM功能(例如,按客户端ID限制费率)。
答案 0 :(得分:1)
无法使用OAuth令牌识别客户端,但您可以将其用于速率限制和日志记录(排序)。通过创建不需要订阅的新产品,可以匿名访问添加到该产品的任何API。为了反击你可以在该产品上放置validate-jwt策略以要求OAuth令牌并检查它的声明,或者如果你真的不关心令牌内容只是想知道它在那里你可以使用check-header策略
使用策略表达式,您可以执行context.Headers.GetValueOrDefault(“Authorization”)。AsJwt()将提供的标头解析为JWT对象模型,检查其声明,并在按键限制和引用中使用它每个客户实施限制的按键策略。
为了使日志记录工作,目前没有其他办法,而是依靠log-to-eventhub策略并自己记录必要的信息。这确实意味着您需要维护EventHub实例和更多基础设施以从中读取记录并将其存储在某处。一些变化正在扩大日志记录功能,这将使这更容易。