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

Next.js+Sequelize+Tedious应用Azure生产环境Managed Identity认证失败

托管标识认证在Azure App Service生产环境失败的排查与解决

一、修正Tedious配置拼写错误

你的配置中存在一个关键拼写错误:encypt应改为encrypt。Azure SQL生产环境默认强制加密连接,这个错误会直接导致认证失败。修正后的完整配置如下:

const options: SequelizeOptions = {
  database: process.env.DATABASE_NAME,
  host: process.env.DB_HOST,
  port: 1433,
  dialect: "mssql",
  logging: process.env.NODE_ENV === "development" ? console.log : false,
  dialectModule: tedious,
  dialectOptions: {
    authentication: {
      type: "azure-active-directory-default",
      options: {
        clientId: process.env.CLIENT_ID, // 用户分配托管标识ID
        encrypt: true, // 修正拼写错误
      },
    },
    encrypt: true, // 顶层启用连接加密,匹配SQL生产环境要求
  },
};

二、Azure App Service生产环境的必要托管标识配置

无论使用系统分配还是用户分配托管标识,都必须完成以下配置步骤:

  • 启用并授权托管标识

    • 系统分配标识:在App Service的「身份」→「系统分配」页面开启标识,然后进入Azure SQL数据库的「权限」→「添加角色分配」,将SQL DB Contributor(或按需分配db_datareader/db_datawriter等细粒度角色)分配给该标识。
    • 用户分配标识:先在Azure AD中创建用户分配标识,在App Service的「身份」→「用户分配」页面添加该标识,同样在SQL数据库中为其分配对应数据访问权限。
  • 核对生产环境变量
    在App Service的「配置」→「应用程序设置」中,确认CLIENT_ID(使用用户分配标识时必填)、DATABASE_NAME、DB_HOST这些变量已正确设置,不要依赖本地.env文件的配置。

  • 检查SQL防火墙规则
    确保Azure SQL Server的防火墙允许App Service访问:可以启用「允许Azure服务和资源访问此服务器」选项,或者添加App Service的出站IP地址到防火墙规则中。

  • 验证版本兼容性
    确认使用的Tedious版本支持Azure AD托管标识认证(推荐使用最新稳定版),同时Sequelize与Tedious版本匹配,避免版本冲突导致认证逻辑失效。

三、开发与生产环境差异的核心原因

开发环境中,你通常通过本地Azure CLI、Visual Studio或其他工具完成了身份认证,应用自动继承了本地有效令牌;而生产环境App Service需要通过托管标识的内置机制获取访问SQL的令牌,任何配置错误(拼写、权限缺失、变量未设置)都会导致令牌获取失败,最终触发「login failed」错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:37:45