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

使用Azure Function获取Azure Maps访问令牌及.NET客户端创建方法

使用.NET创建Azure Maps管理客户端并在Azure Function中获取令牌

1. 安装必要的NuGet包

首先安装Azure Maps管理库与Azure身份验证相关包:

dotnet add package Azure.ResourceManager.Maps
dotnet add package Azure.Identity

2. 配置Azure Function的身份权限

  • 为Azure Function启用系统分配托管身份:在Azure门户进入Function应用→身份→系统分配→开启状态并保存。
  • 为托管身份分配Azure Maps角色:在目标Azure Maps账户的「访问控制(IAM)」中添加角色分配,选择「Azure Maps Data Reader」或「Azure Maps Contributor」(按需选择),将该托管身份作为成员添加。

3. 创建.NET Azure Maps管理客户端

基于托管身份初始化客户端(推荐)

在Azure Function代码中,借助DefaultAzureCredential自动获取托管身份凭据,初始化管理客户端并获取访问令牌:

using Azure.Identity;
using Azure.ResourceManager.Maps;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;

public class MapsTokenFunction
{
    [FunctionName("GetMapsToken")]
    public async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = null)] HttpRequest req,
        ILogger log)
    {
        var subscriptionId = "<你的Azure订阅ID>";
        var resourceGroupName = "<Maps账户所属资源组名>";
        var mapsAccountName = "<你的Azure Maps账户名>";

        // 初始化Maps管理客户端
        var credential = new DefaultAzureCredential();
        var mapsClient = new MapsManagementClient(credential, subscriptionId);

        // 示例:获取Maps账户基础信息
        var mapsAccount = await mapsClient.Accounts.GetAsync(resourceGroupName, mapsAccountName);
        log.LogInformation($"当前Maps账户: {mapsAccount.Value.Name}");

        // 获取供SPA使用的Azure Maps访问令牌
        var tokenScope = "https://atlas.microsoft.com/.default";
        var tokenRequest = new TokenRequestContext(new[] { tokenScope });
        var tokenResult = await credential.GetTokenAsync(tokenRequest, CancellationToken.None);

        return new OkObjectResult(new 
        { 
            AccessToken = tokenResult.Token, 
            ExpiresOn = tokenResult.ExpiresOn 
        });
    }
}

基于服务主体初始化客户端(可选)

若需使用服务主体而非托管身份,可手动配置凭据:

var tenantId = "<Azure AD租户ID>";
var clientId = "<服务主体客户端ID>";
var clientSecret = "<服务主体密钥>";

var credential = new ClientSecretCredential(tenantId, clientId, clientSecret);
var mapsClient = new MapsManagementClient(credential, subscriptionId);

4. 关键注意事项

  • 令牌范围:https://atlas.microsoft.com/.default是Azure Maps的默认权限范围,获取的令牌可用于地图渲染、地理搜索等核心服务访问。
  • 权限匹配:托管身份/服务主体的角色需与业务需求匹配,仅需令牌访问则分配「Maps Data Reader」,需管理Maps资源则分配「Maps Account Contributor」。
  • 令牌缓存:建议在Function中对令牌进行缓存,减少重复请求次数,提升响应性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:15:42