首页 > 解决方案 > Event Grid + CloudEvents + Webhooks 如何支持更新 access_token?

问题描述

CloudEvents 有一个用于事件传递的 webhook 规范:HTTP 1.1 Web Hooks for Event Delivery - Version 1.0。除其他外,CloudEvents Webhooks 规范详细说明了 Webhook 验证和授权的要求。如规范中所述,CloudEvents webhooks 授权方法“依赖于 OAuth 2.0 Bearer Token RFC6750 模型”。

Azure 事件网格支持 CloudEvents:将 CloudEvents v1.0 架构与事件网格一起使用

事件网格对 webhook 授权的支持仅限于“在创建事件订阅时向 webhook URL 添加查询参数”,如下所述:验证对 Azure 事件网格资源的访问。

鉴于 OAuth 持有者令牌的生命周期有限,因此我需要一种刷新令牌的方法。但是,据我所知,事件网格除了在定义 webhook 订阅时在查询参数中硬编码令牌之外没有提供任何机制。

我的理解正确吗?有什么建议吗?

编辑:在这种情况下,webhook 端点是未托管在 Azure 上的外部端点。它是一个简单地支持 CloudEvents webhooks 规范的第 3 方端点。

标签: webhooksazure-eventgridcloudevents

解决方案


您的问题中提到的文档(例如使用 Azure AD 将事件传递到 webhook 端点进行身份验证)不够清楚。看起来有描述(混合)两种方法如何确保将事件传递到 webhook。

1. 我建议使用本文档第一部分中描述的方式,例如使用 AAD 进行身份验证并授权 Azure 事件网格将事件传递到您的 webhook 端点处理程序。

在这种情况下,填充以下属性所需的订阅:

azureActiveDirectoryTenantId
azureActiveDirectoryApplicationIdOrUr 

请注意,验证过程不依赖于上述属性,换句话说,您的订阅可以成功创建,但不会将事件传递到 webhook 端点,因为 AAD 授权错误。

在基于订阅TenantIdApplicationId值的 AEG 将从 AAD 获取访问令牌(Bearer)的情况下,该事件将通过Authorization标头中的访问令牌传递到 Webhook 端点处理程序。

现在,您的订阅者处理程序有新的(有效的)访问令牌供其使用。

2.第二种方式,例如在webhook url地址中使用查询参数,就像你提到的那样工作。此秘密值在创建订阅的过程中被硬编码,并且不由 AEG 管理(刷新/更新/等)。


推荐阅读