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

如何通过MSAL.NET连接Microsoft Fabric中OneLake的SQL端点?

解决C++应用通过MSAL连接OneLake SQL端点的认证问题

问题核心

OneLake的SQL端点使用Fabric专属Azure AD租户的认证端点(即你收到的pbipneu9-northeurope.pbidedicated.windows.net),而非通用的login.microsoftonline.com公共端点。你的现有MSAL配置硬编码了公共端点,导致认证失败,需调整MSAL的权威机构(Authority)配置。

具体解决方案

  1. 构造正确的Authority URL
    专属租户的Authority URL格式为:

    https://{your-onelake-auth-domain}/{tenant-id}/v2.0
    

    替换你的实际值后应为:

    https://pbipneu9-northeurope.pbidedicated.windows.net/{your-tenant-id}/v2.0
    
    • 若不知道租户ID,可访问https://pbipneu9-northeurope.pbidedicated.windows.net/.well-known/openid-configuration,返回的JSON中issuer字段包含租户ID。
  2. 修改MSAL初始化代码
    在创建MSAL客户端实例时,指定上述自定义Authority,替代原来的公共端点配置。示例代码(C++/CLI调用MSAL.NET):

    #include <msal.h>
    using namespace Microsoft::Identity::Client;
    
    // 替换为你的应用客户端ID和租户ID
    const wchar_t* clientId = L"your-client-id-here";
    const wchar_t* tenantId = L"your-tenant-id-here";
    const wchar_t* authority = L"https://pbipneu9-northeurope.pbidedicated.windows.net/your-tenant-id-here/v2.0";
    
    auto app = PublicClientApplicationBuilder::Create(clientId)
        ->WithAuthority(authority)
        ->Build();
    
  3. 指定正确的权限范围
    获取令牌时,需使用OneLake/Fabric对应的权限范围,通常为https://fabric.microsoft.com/.default。示例交互式认证代码:

    // 替换为你的窗口句柄(用于弹出交互式登录窗口)
    HWND parentWindow = GetActiveWindow();
    
    auto result = app->AcquireTokenInteractive({ L"https://fabric.microsoft.com/.default" })
        ->WithParentWindow(parentWindow)
        ->ExecuteAsync()
        ->GetAwaiter()
        ->GetResult();
    
    // 使用获取到的AccessToken构建SQL连接字符串
    std::wstring connStr = L"Server=tcp:your-onelake-sql-endpoint,1433;Database=your-db;Authentication=Active Directory Access Token;UID=AnyString;PWD=" + result->AccessToken();
    
  4. 验证权限与租户授权

    • 确保你的应用注册已在Fabric租户中配置了必要的权限(如Fabric SQL相关权限)。
    • 交互式认证的用户需拥有OneLake对应资源的访问权限。

注意事项

  • 若遇到SSL证书验证问题,确认客户端信任Fabric端点的SSL证书(通常无需额外配置,公共Fabric端点使用正规CA证书)。
  • 若使用Confidential Client而非Public Client,配置逻辑一致,只需替换为ConfidentialClientApplicationBuilder并添加客户端凭据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 00:15:11