使用托管标识和基于令牌的登录从 Azure Function 访问 Azure Analysis Services

Access from Azure Function to Azure Analysis Services using managed identity and token-based login

我们正在尝试使用托管标识从 Azure Function(.Net 4.8) 访问 Azure Analisys Services,以检索有效令牌并向 AAS 进行身份验证。

这是我们使用的代码:

private static string GetToken()
{
            return new AzureServiceTokenProvider().GetAccessTokenAsync($"https://{ConfigurationManager.AppSettings["AASSRegion"]}.asazure.windows.net", ConfigurationManager.AppSettings["TenantId"]).Result;
}

private static string GetConnectionString()
{
            return $"Provider=MSOLAP;" +
                $"Data Source=asazure://{ConfigurationManager.AppSettings["AASSRegion"]}.asazure.windows.net/{ConfigurationManager.AppSettings["AASSName"]}:rw;" +
                $"Initial Catalog=Example;" +
                $"Password={GetToken()};" +
                $"Persist Security Info=True;" +
                $"Impersonation Level=Impersonate";
}

执行后我们获得了一个有效的令牌并生成了一个有效的连接字符串,但是当我们尝试连接到 AAS 时,我们收到以下 500 错误:

Either the user, 'app:appid@tenantid', does not have access to the 'Example' database, or the database does not exist

(报错信息中app和tenant的id都正确)

在AAS中允许托管标识,并且“AASRegion”、“AASName”和“TenantId”的键配置好。

appid 在 AAS 和贡献者 RBAC 角色中具有管理员权限。

我们缺少什么?是否可以使用托管身份连接到 AAS?

已解决:问题是在 AAS 中我们添加了托管身份的对象 ID 而不是应用程序 ID。您可以在企业应用程序上看到两者:

enter image description here