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

如何配置Sequelize的db.config以支持Azure AD服务主体认证?

修改Sequelize配置适配Azure AD服务主体认证

1. 先换配置文件格式

把原来的db.config.json改成db.config.js——毕竟JSON没法写异步逻辑,JS文件才能实现动态获取token的功能。

2. 把服务主体token逻辑集成进去

在新的db.config.js里,加入你之前实现的服务主体获取token的逻辑,然后把token作为认证凭证传给Sequelize。直接用下面的示例代码改就行:

const { AuthenticationContext } = require('adal-node');
require('dotenv').config();

// 从环境变量读服务主体信息
const tenantId = process.env.AZURE_TENANT_ID;
const clientId = process.env.AZURE_CLIENT_ID;
const clientSecret = process.env.AZURE_CLIENT_SECRET;
const resource = 'https://database.windows.net/'; // SQL Server固定资源ID

// 获取access token的异步函数
async function getAccessToken() {
  return new Promise((resolve, reject) => {
    const context = new AuthenticationContext(`https://login.microsoftonline.com/${tenantId}`);
    context.acquireTokenWithClientCredentials(
      resource,
      clientId,
      clientSecret,
      (err, tokenResponse) => {
        if (err) {
          reject(err);
          return;
        }
        resolve(tokenResponse.accessToken);
      }
    );
  });
}

// 导出动态配置,自动处理token刷新
module.exports = {
  development: {
    database: process.env.DB_DATABASE,
    host: process.env.DB_HOST,
    dialect: 'mssql',
    logging: false,
    dialectOptions: {
      authentication: {
        type: 'azure-active-directory-service-principal',
        options: {
          // Sequelize会在需要连接时自动调用这个函数拿最新token
          getAccessToken: async () => {
            try {
              return await getAccessToken();
            } catch (err) {
              throw new Error(`获取Azure AD token失败: ${err.message}`);
            }
          }
        }
      },
      options: {
        encrypt: true // Azure SQL必须开加密连接
      }
    }
  }
};

3. 补全环境变量

在.env文件里加几个服务主体相关的变量:

AZURE_TENANT_ID=你的租户ID
AZURE_CLIENT_ID=你的服务主体客户端ID
AZURE_CLIENT_SECRET=你的服务主体客户端密钥

4. 调整Sequelize迁移的配置路径

如果有.sequelizerc文件,把配置路径改成新的db.config.js:

const path = require('path');

module.exports = {
  config: path.resolve('config', 'db.config.js'),
  // 其他迁移相关配置保持不变
};

注意点:

  • 必须指定认证类型为azure-active-directory-service-principal,这是mssql dialect专门支持的Azure AD认证方式
  • getAccessToken函数会自动在需要时刷新token,不用手动处理过期问题
  • Azure SQL强制要求加密连接,所以encrypt: true不能省

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 02:35:22