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

AdomdConnection是否支持访问令牌?C#连接Analysis Services认证问询

使用访问令牌连接Azure Analysis Services的正确实现

你提到用SqlConnection可以直接通过AccessToken属性传入认证令牌,但连接Analysis Services时找不到对应的设置入口,尝试把令牌塞进Password参数里却报了Authentication failed——这确实是个容易踩的坑,因为Analysis Services的ADOMD客户端对OAuth2令牌的处理逻辑和SQL Server不一样。

先给你最直接的解决方案

首先确保你安装了最新版的Microsoft.AnalysisServices.AdomdClient NuGet包(19.0.0及以上版本才支持直接设置AccessToken属性,老版本没有这个能力)。

方式一:直接设置AdomdConnection的AccessToken属性

和SqlConnection的用法几乎一致,新版本的ADOMD客户端已经原生支持这个属性,不需要在连接字符串里绕弯:

// 基础连接字符串,只包含实例地址和数据库,不用加任何认证参数
var connectionString = "Provider=MSOLAP;Data Source=asazure://somewhere.asazure.windows.net/xyz;Catalog=mydb";
var conn = new AdomdConnection(connectionString);
// 直接赋值AccessToken,和SqlConnection的用法完全对齐
conn.AccessToken = GetToken();
// 打开连接
conn.Open();

方式二:通过连接字符串传递AccessToken参数

如果你习惯用连接字符串构建器,也可以直接添加AccessToken参数,而不是错误地用Password:

var builder = new OleDbConnectionStringBuilder 
{ 
    ConnectionString = "Provider=MSOLAP;Data Source=asazure://somewhere.asazure.windows.net/xyz;Catalog=mydb" 
};
// 注意这里是"AccessToken",不是"Password"!
builder.Add("AccessToken", GetToken());
var conn = new AdomdConnection(builder.ConnectionString);
conn.Open();

为什么你之前的方法会失败?

你之前把令牌放到Password参数里,MSOLAP驱动会把它当作传统用户名密码认证的密码来处理,而不是OAuth2协议的访问令牌,自然会触发认证失败。这两个参数的语义完全不同,不能混用。

对你的GetToken方法的小优化

你的GetToken用了较旧的HttpWebRequestAPI,推荐换成更现代的HttpClient,代码更简洁且性能更好:

private static string GetToken()
{
    using var httpClient = new HttpClient();
    httpClient.DefaultRequestHeaders.Add("Metadata", "true");
    var response = httpClient.GetAsync("xxx").Result;
    response.EnsureSuccessStatusCode();
    var stringResponse = response.Content.ReadAsStringAsync().Result;
    var j = new JavaScriptSerializer();
    var tokenData = (Dictionary<string, string>)j.Deserialize(stringResponse, typeof(Dictionary<string, string>));
    return tokenData["access_token"];
}

如果你的项目支持异步,建议改成异步版本(用async/await),避免阻塞线程。

额外注意事项

  • 确保你的访问令牌的受众(Audience)是Azure Analysis Services,通常是https://asazure.windows.net/,受众不匹配会直接导致认证失败。
  • 确认令牌对应的身份有访问目标Analysis Services实例和数据库的权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:26:48