验证事件传递到事件处理程序(Azure 事件网格)

时间:2021-02-10 17:39:19

标签: authentication event-handling bearer-token azure-eventgrid

我想让第三方组织以安全的方式订阅我的事件网格事件。我正在尝试使用以下文章中提到的 Azure AD 执行此操作。

https://docs.microsoft.com/en-us/azure/event-grid/security-authentication

https://docs.microsoft.com/en-us/azure/event-grid/secure-webhook-delivery

在事件订阅创建中,我选择了WebHook端点类型并输入了组织的端点。为了进行概念验证,我从 Azure AD 创建了一个 Azure 函数 (HttpTrigger) 作为 webhook 端点。

Endpoint

在附加功能选项卡下,我激活了 AAD 身份验证。通过这种方式,我设法向 webhook 端点发送了一个不记名令牌。

AAD Authentication

我的问题是事件订阅者应该如何验证来自事件发布者的令牌?

如果您想向受不记名令牌身份验证保护的 API 发出请求,您首先需要从 API 请求令牌,然后使用该令牌发出请求,然后 API 会对其进行验证。在这种情况下,令牌发行者和验证者是相同的。

在事件发布者/订阅者场景中,订阅者不是令牌发行者。这就是让我困惑的地方。

当令牌被解密时,它的来源就很明显了。

{
  "aud": "00000000-0000-0000-0000-000000000000",
  "iss": "https://sts.windows.net/00000000-0000-0000-0000-000000000000/",
  "iat": 1612970997,
  "nbf": 1612970997,
  "exp": 1613057697,
  "aio": "Lorem ipsum viverra",
  "appid": "00000000-0000-0000-0000-000000000000",
  "appidacr": "2",
  "idp": "https://sts.windows.net/00000000-0000-0000-0000-000000000000/",
  "oid": "00000000-0000-0000-0000-000000000000",
  "rh": "Lorem ipsum viverra",
  "roles": [
    "role"
  ],
  "sub": "00000000-0000-0000-0000-000000000000",
  "tid": "00000000-0000-0000-0000-000000000000",
  "uti": "Lorem ipsum viverra",
  "ver": "1.0"
}

我应该通过一些关于事件发布者的常量来验证令牌还是有更优雅的方法?

更新:如果有人对我的实现方式感兴趣,我会在这里留下一个演示项目。

https://github.com/sahinad/Event.Grid.Subscriber.Api

0 个答案:

没有答案