使用 Azure AD 身份验证保护 Azure WebJob API
使用 Azure AD 身份验证保护 Azure WebJob Webhook URL
引言
在深入研究 Azure Webjob 的安全性方面之前,让我们首先尝试了解 Webjob 是什么。
如果用简单的语言来定义,Azure Webjob 是 Microsoft 运行后台作业的 PaaS 解决方案。基本上,我们可以将它们视为 Windows 服务的直接替代品,我们开发 Windows 服务来运行后台作业。它们是 Azure App Service 的一部分,并在与 WebApps 相同的实例中运行。 我们不必为 Webjob 承担额外的费用。
与 Windows 服务类似,Azure Webjob 有两种类型
- 连续 - 顾名思义,它们将持续运行,直到我们强制停止它们
- 触发 - 它们不会运行,直到外部力量启动它们
同样,连续 Webjob 也有两种类型
- 多实例 - 这些 Webjob 将在 Azure App Service 的应用服务计划的所有实例上运行程序,其中 Webjob 托管在其中。 默认情况下,所有连续 Webjob 都是多实例 Webjob。
- 单实例 - 这些 Webjob 仅在 Azure App Service 的应用服务计划的一个实例上运行程序,其中 Webjob 托管在其中。
同样,触发的 Webjob 也根据它们的触发方式分为两种类型
- 计划的 Webjob - 这些 Webjob 将在预定义的时间开始运行程序。 但是,如果我们除了计划时间之外还需要触发它们,我们可以通过登录到 Azure 门户或通过 Webhook URL 手动触发它们
- 手动触发的 Web Job - 我们必须通过登录到 Azure 门户或通过 Webhook URL 手动触发它们
要了解有关 Webjob 的更多信息,您可以阅读这篇MSDN 文章。
什么是 Azure Webjob Webhook URL?
Azure Webjob Webhook 只是 Azure SCM 站点中 Azure Webjob 的位置,对于该应用服务,其中 Webjob 托管在后接我们想要对 Azure Webjob 执行的操作。
例如,我们有一个名为“CodeProjectWebJob
”的 Azure Webjob 托管在名为“CodeProjectAppService
”的 Azure App Service 中,并且我们想通过 HTTP 调用触发此 Webjob,那么 webhook URL 将是
对于连续的 Webjob
https://codeprojectappservice.scm.azurewebsites.net/api/continuouswebjobs/CodeProjectWebJob/run
对于触发的 webjob
https://codeprojectappservice.scm.azurewebsites.net/api/triggeredwebjobs/CodeProjectWebJob/run
在这里,run 是触发 webjob
的命令。
除了触发 webjob
之外,我们还可以执行删除 webjob
、获取 webjob
历史记录等操作。(有关此的更多信息,请访问此处)。此 webhook
URL 使用默认凭据进行保护,其中用户名是 $appservicename
,密码我们可以从 App service 发布配置文件中获取。
使用 Azure AD 保护 Webhook API
我们还可以使用 Azure AD 身份验证来保护此 webhook API。要为 webhook API 启用 Azure AD 身份验证,我们需要按照以下步骤操作
- 在 Azure Active Directory 中注册您的 App Service
- 转到您的应用服务,然后单击左侧面板中的“身份验证/授权”。
- 启用 App Service 身份验证。
- 在“当请求未通过身份验证时要执行的操作”中选择“使用 Azure Active Directory 登录”,然后单击“Azure Active Directory”框
- 在管理模式下,选择高级。
- 提供客户端 ID 和颁发者 URL,webhook 应该针对该客户端 ID 和颁发者 URL 进行身份验证,然后单击确定并保存设置。
- 提供参与者访问权限
- 再次,转到您的应用服务,然后单击左侧面板中的“访问控制”。
- 转到角色分配。
- 从“角色”下拉列表中选择“参与者”角色。
- 添加您的 Azure AD 应用程序。
现在,您的 webjob 的 Webhook API 已使用 Azure AD 身份验证进行保护。
在生成 Azure AD 访问令牌以调用 webjob
时,我们需要确保提供 https://management.core.windows.net 作为资源。
历史
- 2020 年 6 月 27 日 - 初稿