能否通过编程方式创建Azure Maps SAS令牌并定期续订?
Azure Maps SAS令牌的编程创建与自动续订
完全可以通过编程方式生成Azure Maps的SAS令牌,并且实现过期前的自动续订,具体实现方案如下:
- 核心前提:需要使用具备Azure Maps账户相关权限的服务主体(SPN),最小权限要求是
Microsoft.Maps/accounts/listSas/action,推荐直接分配Azure Maps Account Contributor角色。 - 实现步骤:
- 通过服务主体获取Azure AD访问令牌,目标资源指定为
https://management.azure.com/。 - 调用Azure Maps的管理REST API生成SAS令牌,请求中指定令牌的权限、有效期、签名密钥等参数。
- 将生成逻辑封装为定时任务(比如Azure Functions、Logic Apps),在当前令牌过期前自动执行生成流程,并更新应用的令牌配置(建议配合Azure Key Vault存储令牌)。
- 通过服务主体获取Azure AD访问令牌,目标资源指定为
代码示例(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
相关产品推荐
相关产品推荐

