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

ASP.NET Core调用Databricks API遇401:Entra Token缺user_impersonation权限

问题描述

我们的Web应用已在Entra ID中注册,采用OIDC协议进行身份认证。已在Entra的API权限中添加Databricks的user_impersonation范围,并将<databricks_app_id>/.default作为范围配置到OpenIdConnect客户端。但用户登录后,Entra返回的Access Token中不包含user_impersonation范围,使用该令牌调用Databricks API时出现HTTP 401未授权错误。

相关代码实现:

OidcClient登录代码

var options = new OidcClientOptions()
{
    Authority = "https://login.microsoftonline.com/<tenant_id>",
    ClientId = "<client_id>",
    ClientSecret = "<client_secret>",
    Scope = "<databricks_id>/.default openid",
    Browser = new WpfEmbeddedBrowser(),
    RedirectUri = "https://localhost:<port_no>/callback",
}

options.Policy.Discovery.ValidateEndpoints = false;
options.Policy.Discovery.ValidateIssuerName = false;
var _oidcClient = new OidcClient(options);
var loginResult = await _oidcClient.LoginAsync();

ASP.NET Core认证服务配置

services.AddAuthentication(options =>
{
    options.DefaultScheme = "Cookies";
        options.DefaultChallengeScheme = "oidc";
        
})
.AddOpenIdConnect("oidc", options =>
{
    options.BackchannelHttpHandler = new HttpClientHandler
    {
        ServerCertificateCustomValidationCallback = (message, cert, chain, errors) => true
    };

    options.Authority = "https://login.microsoftonline.com/<tenant_id>";

    options.Scope.Add("openid");   
    options.Scope.Add("<databricks_id>/.default");
    //options.Scope.Add("<databricks_id>/user_impersonation");
    options.CallbackPath = "/callback";
    options.ResponseType = "code";
    options.SaveToken = true;
    options.ClientId = "<client_id>";
    options.ClientSecret = "<client_secret>";
}
解决方案

1. 确认API权限已完成管理员同意

在Entra ID的应用注册页面,找到已添加的Databricks user_impersonation权限,确保点击过授予管理员同意按钮。仅添加权限但未完成同意操作,令牌不会包含该范围。

2. 调整范围配置逻辑

/.default范围适用于应用权限(无需用户上下文),而user_impersonation属于委托权限,需直接指定具体范围:

  • OidcClient配置中修改Scope:
    Scope = "<databricks_id>/user_impersonation openid"
    
  • ASP.NET Core配置中取消注释并使用具体范围:
    options.Scope.Add("<databricks_id>/user_impersonation");
    // 若有其他应用权限需要保留,可同时保留/.default范围
    

3. 验证令牌内容

用本地JWT解码工具解析返回的Access Token,检查scp字段是否包含user_impersonation。若仍不包含,排查以下点:

  • 确认Databricks应用ID填写无拼写错误
  • 确认Entra ID中添加的权限类型为委托权限(匹配用户登录的OIDC流程)
  • 检查OIDC流程响应类型为code时,令牌请求步骤是否正确携带了指定范围

4. 核对令牌受众匹配

确认Access Token的aud字段值与Databricks应用ID完全一致,若受众不匹配,Databricks API会直接返回401错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 01:35:29