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

Azure WebApp系统分配身份在JDBC驱动10.1.x以上版本失效,MSI令牌获取失败

解决Azure WebApp升级JDBC驱动≥10.2后MSI身份认证失败的思路

针对升级SQL Server JDBC驱动到10.2、11.x或12.x版本后,系统分配MSI身份无法获取令牌的问题,按以下方向排查:

1. 确认Azure WebApp的MSI环境变量

新版JDBC驱动依赖Azure WebApp自动注入的IDENTITY_ENDPOINT和IDENTITY_HEADER环境变量来获取MSI令牌,而10.1版本可能使用了旧的端点探测逻辑:

  • 登录Azure门户,进入WebApp的「配置」→「应用程序设置」,检查这两个变量是否存在且值有效:
    • IDENTITY_ENDPOINT:格式应为http://169.254.132.2:8081/msi/token
    • IDENTITY_HEADER:为一串随机的认证头值
  • 若变量缺失,重新禁用并启用系统分配身份,触发Azure重新注入变量。

2. 添加Azure Identity依赖

10.2及以上版本的JDBC驱动已将MSI令牌获取逻辑迁移至azure-identity库,不再内置相关实现。若项目未引入该依赖,会导致令牌获取失败:

  • Maven项目添加依赖:
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
        <version>1.12.0</version> <!-- 使用与驱动兼容的最新稳定版 -->
    </dependency>
    
  • Gradle项目添加依赖:
    implementation 'com.azure:azure-identity:1.12.0'
    

3. 显式配置MSI相关驱动属性

尝试显式指定驱动的MSI参数,覆盖默认逻辑:

  • 设置MSI API版本为较新版本(解决401错误可能的API兼容性问题):
    ds.setMsiApiVersion("2019-08-01");
    
  • 显式指定SQL Server资源标识符:
    ds.setResourceName("https://database.windows.net/");
    

4. 排查网络与权限配置

  • MSI端点访问权限:确认WebApp未被VNet集成、防火墙或网络安全组(NSG)阻止访问http://169.254.132.2:8081(Azure内部元数据端点),该端点是MSI获取令牌的必要路径。
  • SQL DB权限验证:重新确认系统分配身份在SQL数据库中的角色权限(如db_datareader、db_datawriter或自定义角色),虽然10.1版本正常,但新版驱动可能对权限验证逻辑做了严格校验。

5. 排查依赖冲突

若项目中存在旧版Azure身份认证相关依赖(如adal4j),可能与新版azure-identity产生冲突:

  • 执行依赖分析(Maven用mvn dependency:tree,Gradle用gradle dependencies),移除或排除旧版依赖,确保只有azure-identity作为身份认证依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 23:58:22