You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何以编程方式管理Azure Web Job的应用设置?——解决Graph API增量查询Delta Token的存储更新需求

可以将Delta Token存储到Azure Web Job的应用设置中,并且支持编程更新

首先明确:完全可以把Delta Token存储在Azure Web Job所属Web App的应用设置里——因为Web Job本质是依附于Web App的,它可以直接读取Web App的应用设置(就像读取环境变量一样)。每次运行Web Job获取到新的Delta Token后,你可以通过编程方式更新这个应用设置,确保下一次运行能拿到最新的Token。

下面分两部分说明具体实现:

一、编程更新Azure Web Job的应用设置(以.NET为例)

要更新应用设置,你需要借助Azure的资源管理SDK,并且需要一个拥有Web App配置修改权限的Azure AD应用。

步骤1:准备权限与依赖

  1. 在Azure AD中注册一个应用程序,为其分配网站参与者角色(或更细粒度的Microsoft.Web/sites/config/write权限)到Web Job所属的Web App资源上。
  2. 安装NuGet包:Azure.ResourceManager和Azure.ResourceManager.AppService(这是微软推荐的新一代ARM SDK)。

步骤2:示例代码

using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.AppService;
using Azure.ResourceManager.AppService.Models;

// 替换为你的实际参数
var tenantId = "你的Azure AD租户ID";
var clientId = "注册的Azure AD应用客户端ID";
var clientSecret = "Azure AD应用的客户端密钥";
var subscriptionId = "你的Azure订阅ID";
var resourceGroupName = "Web App所在的资源组名称";
var webAppName = "Web Job所属的Web App名称";
var newDeltaToken = "本次运行获取到的最新Delta Token";

// 初始化ARM客户端
var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var armClient = new ArmClient(credential, subscriptionId);

// 获取目标Web App资源
var webAppResourceId = WebSiteResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, webAppName);
var webApp = armClient.GetWebSiteResource(webAppResourceId);

// 获取当前应用设置并更新Delta Token
var currentConfig = await webApp.GetSiteConfigAsync();
var appSettingsDict = currentConfig.Value.AppSettings.ToDictionary(s => s.Name, s => s.Value);
appSettingsDict["DeltaToken"] = newDeltaToken; // 覆盖或新增这个设置

// 构建更新请求并执行
var updateConfig = new SiteConfigProperties
{
    AppSettings = appSettingsDict.Select(kv => new NameValuePair(kv.Key, kv.Value)).ToList()
};
var updateOperation = await webApp.UpdateSiteConfigAsync(updateConfig);
await updateOperation.WaitForCompletionAsync();

其他语言/方式(可选)

如果你用PowerShell编写Web Job,也可以用Az模块实现:

# 以服务主体身份登录Azure
Connect-AzAccount -ServicePrincipal -Tenant "你的租户ID" -ApplicationId "你的客户端ID" -Secret "你的客户端密钥"

# 获取当前应用设置
$webApp = Get-AzWebApp -ResourceGroupName "资源组名称" -Name "Web App名称"
$currentSettings = @{}
foreach ($setting in $webApp.SiteConfig.AppSettings) {
    $currentSettings[$setting.Name] = $setting.Value
}

# 更新Delta Token
$currentSettings["DeltaToken"] = "新的Delta Token值"

# 应用更新
Set-AzWebApp -ResourceGroupName "资源组名称" -Name "Web App名称" -AppSettings $currentSettings

二、关键注意事项

  • Web Job与Web App的关系:Web Job没有独立的应用设置,它共享所属Web App的应用设置,所以你更新的是Web App的配置,Web Job通过Environment.GetEnvironmentVariable("DeltaToken")即可读取。
  • 重启影响:如果你的Web Job是连续运行的,更新应用设置会触发Web App(包括Web Job)重启;如果是触发式/定时运行的Web Job,每次运行都是独立实例,重启不会影响后续运行,这个方案非常合适。
  • 安全性:应用设置在Azure中是静态加密存储的,但如果有其他有权限访问Web App配置的人员,他们可以看到这个Token,需要评估这个风险是否在你的可接受范围内。
  • 权限验证:确保你的Azure AD应用拥有足够的权限修改Web App配置,否则会出现权限不足的错误。

内容的提问来源于stack exchange,提问作者dhruvil29

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 04:52:44