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

能否通过编程方式创建Azure Maps SAS令牌并定期续订?

Azure Maps SAS令牌的编程创建与自动续订

完全可以通过编程方式生成Azure Maps的SAS令牌,并且实现过期前的自动续订,具体实现方案如下:

  • 核心前提:需要使用具备Azure Maps账户相关权限的服务主体(SPN),最小权限要求是Microsoft.Maps/accounts/listSas/action,推荐直接分配Azure Maps Account Contributor角色。
  • 实现步骤:
    1. 通过服务主体获取Azure AD访问令牌,目标资源指定为https://management.azure.com/。
    2. 调用Azure Maps的管理REST API生成SAS令牌,请求中指定令牌的权限、有效期、签名密钥等参数。
    3. 将生成逻辑封装为定时任务(比如Azure Functions、Logic Apps),在当前令牌过期前自动执行生成流程,并更新应用的令牌配置(建议配合Azure Key Vault存储令牌)。

代码示例(C#)

using Azure.Identity;
using System.Net.Http.Headers;
using System.Text.Json;

// 配置服务主体及Azure资源信息
var tenantId = "你的租户ID";
var clientId = "你的服务主体ID";
var clientSecret = "你的服务主体密钥";
var subscriptionId = "你的订阅ID";
var resourceGroupName = "资源组名称";
var mapsAccountName = "Azure Maps账户名称";

// 获取Azure AD访问令牌
var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var tokenRequest = new TokenRequestContext(new[] { "https://management.azure.com/.default" });
var tokenResult = await credential.GetTokenAsync(tokenRequest);

// 构造SAS生成请求参数
var sasParams = new
{
    signingKey = "primary", // 可选值:primary/secondary
    start = DateTime.UtcNow.ToString("yyyy-MM-ddTHH:mm:ssZ"),
    expiry = DateTime.UtcNow.AddDays(7).ToString("yyyy-MM-ddTHH:mm:ssZ"),
    permissions = "read", // 支持多权限组合,用逗号分隔,比如"read,write"
    maxRatePerSecond = null // 可选,用于限制令牌的请求速率
};

// 调用API生成SAS令牌
using var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", tokenResult.Token);

var apiUrl = $"https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Maps/accounts/{mapsAccountName}/listSas?api-version=2023-06-01";
var response = await httpClient.PutAsJsonAsync(apiUrl, sasParams);
response.EnsureSuccessStatusCode();

var sasResponse = await response.Content.ReadFromJsonAsync<JsonElement>();
var sasToken = sasResponse.GetProperty("accountSasToken").GetString();

关键注意事项

  • 定时任务的触发时间需设置在当前SAS令牌过期前(比如提前1小时),避免出现令牌失效的业务间隙。
  • 生成的SAS令牌需通过Azure Key Vault等安全服务存储,应用程序从Key Vault获取最新令牌,避免硬编码泄露。
  • 权限配置遵循最小权限原则,不要给服务主体分配超出需求的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:22:14