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

如何在纯JavaScript中从Azure Key Vault URI获取API密钥并赋值给apiKey变量

关于前端JS调用Azure Key Vault获取密钥的代码分析

你的这段代码没法直接正常工作,存在几个关键问题,我给你拆解下:

  • 变量名错误:你创建的XMLHttpRequest实例是a,但在onload回调里却用了xhr.responseText,这会直接报错,得改成a.responseText。
  • CORS限制:Azure Key Vault默认不允许前端页面直接跨域请求,浏览器会拦截这个请求,哪怕你令牌正确也没用。
  • 令牌问题:代码里的accessToken完全没定义,你得先通过Azure AD获取针对Key Vault的有效访问令牌,而且前端直接持有令牌非常不安全,很容易被攻击者窃取。
  • 路径不匹配:你要获取的是Example密钥,但代码里的端点写的是/secrets/Eg,得改成对应正确的密钥名称。

哪怕修正了变量名,前端直接调用还是会遇到CORS和安全问题,正确的做法是通过后端服务代理请求Key Vault,前端只和自己的后端交互,由后端去调用Key Vault并返回密钥。如果非要前端尝试,得先配置Key Vault的CORS规则(不推荐,风险极高),还要用MSAL.js库来获取合法令牌,修正后的代码大概是这样:

// 先确保已引入MSAL.js,并且配置了Azure AD应用
const msalConfig = {
    auth: {
        clientId: "你的Azure AD应用ID",
        authority: "https://login.microsoftonline.com/你的租户ID"
    }
};
const msalInstance = new msal.PublicClientApplication(msalConfig);

const keyVaultEndpoint = "https://<keyvault-name>.vault.azure.net/secrets/Example";

async function getApiKey() {
    try {
        // 获取针对Key Vault的访问令牌
        const tokenResponse = await msalInstance.acquireTokenSilent({
            scopes: ["https://vault.azure.net/user_impersonation"],
            account: msalInstance.getAllAccounts()[0]
        });
        const accessToken = tokenResponse.accessToken;

        const xhr = new XMLHttpRequest();
        xhr.open("GET", keyVaultEndpoint);
        xhr.setRequestHeader("Authorization", `Bearer ${accessToken}`);
        xhr.onload = function() {
            if (xhr.status === 200) {
                const response = JSON.parse(xhr.responseText);
                window.apiKey = response.value;
            } else {
                console.error("获取密钥失败:", xhr.statusText);
            }
        };
        xhr.send();
    } catch (error) {
        console.error("获取令牌或密钥出错:", error);
    }
}

但再次强调:前端直接调用Key Vault存在严重安全风险,令牌泄露就等于密钥泄露,强烈建议通过后端中转。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:55:22