JWT访问令牌连接Azure SQL失败,<token-identified principal>登录报错排查
Azure SQL JWT令牌登录失败排查思路
1. 令牌核心声明校验
- 校验
aud(受众)声明:必须为https://database.windows.net/(国际版)或https://database.chinacloudapi.cn/(国内世纪互联版),不得为应用ID、其他资源地址,该字段配置错误是最常见的校验失败原因。 - 校验
iss(发行方)声明:必须和Azure SQL实例所属租户的AD发行地址匹配,格式为https://sts.windows.net/<租户ID>/,确认令牌是从对应租户申请获得。 - 校验
token_type声明:必须为Bearer类型,不能传递ID令牌、刷新令牌代替访问令牌。 - 校验令牌有效期:确认当前时间在
nbf(生效时间)和exp(过期时间)范围内,排除服务器时钟偏差导致的未生效/过期令牌问题。
2. Azure AD应用权限配置校验
- 确认应用注册的委派权限为
Azure SQL Database / user_impersonation,且已完成租户管理员同意,当前用户委派场景不得使用应用程序权限。 - 确认申请令牌时的
scope参数配置正确,必须指定为https://database.windows.net/.default或https://database.windows.net/user_impersonation,不得使用自定义scope。 - 若实际为服务主体直连场景而非用户委派,需单独为服务主体创建数据库外部用户,执行SQL为
CREATE USER [应用注册名称] FROM EXTERNAL PROVIDER;并授予对应角色,不能复用普通AD用户的配置。
3. JDBC驱动与连接配置校验
- 确认运行环境Java版本与JDBC 9.4.0驱动兼容,排除依赖冲突导致的令牌传输异常。
- 确认
accessToken参数传递方式正确:不可将令牌拼接在JDBC URL中,必须通过独立的连接属性传递,且令牌值不需要添加Bearer前缀,直接传递原始字符串即可。 - 排查连接属性冲突:不可同时配置
username、password参数和accessToken参数,二者只能选择一种认证方式。 - 开启JDBC调试日志,添加JVM参数
-Djava.util.logging.config.file=<日志配置文件路径>,捕获完整连接栈,排查是否存在令牌截断、编码异常等传输问题。
4. Azure SQL侧配置校验
- 确认Azure SQL实例的Azure AD管理员配置正常,未发生租户切换、管理员账号变更等问题。
- 执行SQL查询确认外部用户状态:
SELECT name, type, type_desc FROM sys.database_principals WHERE name = 'aname@xxyyzz.onmicrosoft.com';,确认返回结果的type为E(外部用户)且未被禁用。 - 确认应用所在出口IP已加入Azure SQL防火墙允许列表,排除网络拦截导致的认证流程中断。
内容的提问来源于stack exchange,提问作者mainstreet
相关产品推荐
相关产品推荐

