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

如何在Node.js和Java中实现Azure Map getToken API?

实现Azure Maps的getToken API(Node.js & Java)

Node.js 实现方式

场景1:Node.js后端提供Token接口,前端调用获取

先在Node.js后端编写接口生成Azure Maps访问令牌,前端通过调用该接口拿到令牌后传入resolve:

后端代码(基于Azure Identity SDK)

const { DefaultAzureCredential } = require("@azure/identity");
const { MapsManagementClient } = require("@azure/arm-maps");

async function getAzureMapsToken() {
    const credential = new DefaultAzureCredential();
    const client = new MapsManagementClient(credential, "<你的Azure订阅ID>");
    
    // 获取Maps账户的访问令牌
    const tokenResponse = await client.accounts.getSharedAccessToken(
        "<资源组名称>",
        "<Maps账户名称>",
        {
            scopes: ["https://atlas.microsoft.com/.default"],
            expiresInMinutes: 60 // 按需设置令牌有效期
        }
    );
    
    return tokenResponse.accessToken;
}

// 用Express暴露接口供前端调用
const express = require("express");
const app = express();
app.get("/get-maps-token", async (req, res) => {
    try {
        const token = await getAzureMapsToken();
        res.json({ token });
    } catch (err) {
        res.status(500).json({ error: err.message });
    }
});

app.listen(3000, () => console.log("后端服务运行在3000端口"));

前端getToken回调实现

let Options = {
    authOptions: {
        authType: AuthenticationType.anonymous,
        clientId: "<你的Azure Maps Client ID>",
        getToken: async (resolve, reject) => {
            try {
                // 调用后端接口获取令牌
                const response = await fetch("http://localhost:3000/get-maps-token");
                const data = await response.json();
                resolve(data.token);
            } catch (err) {
                reject(err);
            }
        }
    }
};

场景2:Node.js环境直接生成Token(如Electron应用)

如果是在Node.js环境中直接使用Azure Maps SDK,可直接在getToken回调内调用SDK获取令牌:

const { DefaultAzureCredential } = require("@azure/identity");

let Options = {
    authOptions: {
        authType: AuthenticationType.anonymous,
        clientId: "<你的Azure Maps Client ID>",
        getToken: async (resolve, reject) => {
            try {
                const credential = new DefaultAzureCredential();
                // 请求Azure Maps的访问令牌
                const tokenResult = await credential.getToken("https://atlas.microsoft.com/.default");
                resolve(tokenResult.token);
            } catch (err) {
                reject(err);
            }
        }
    }
};

Java 实现方式

后端生成Token接口,前端调用

使用Azure Identity Java SDK生成Azure Maps访问令牌,通过Spring Boot暴露接口供前端调用:

Maven依赖

<dependencies>
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
        <version>1.12.0</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
        <version>3.2.0</version>
    </dependency>
</dependencies>

Java后端代码(Spring Boot示例)

import com.azure.core.credential.AccessToken;
import com.azure.core.credential.TokenCredential;
import com.azure.core.credential.TokenRequestContext;
import com.azure.identity.DefaultAzureCredential;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MapsTokenController {

    @GetMapping("/get-maps-token")
    public String getAzureMapsToken() {
        TokenCredential credential = new DefaultAzureCredential();
        TokenRequestContext context = new TokenRequestContext()
                .addScopes("https://atlas.microsoft.com/.default");
        
        AccessToken token = credential.getToken(context).block();
        return token.getToken();
    }
}

前端getToken回调实现

let Options = {
    authOptions: {
        authType: AuthenticationType.anonymous,
        clientId: "<你的Azure Maps Client ID>",
        getToken: async (resolve, reject) => {
            try {
                const response = await fetch("http://localhost:8080/get-maps-token");
                const token = await response.text();
                resolve(token);
            } catch (err) {
                reject(err);
            }
        }
    }
};

关键注意事项

  • 权限配置:确保使用的服务主体或托管标识拥有Azure Maps账户的Maps Data Reader或对应操作权限
  • 令牌有效期:按需设置过期时间,减少不必要的令牌请求
  • 安全防护:后端接口需添加权限验证,防止未授权的令牌请求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:36:10