使用托管身份和基于令牌的登录从Azure功能访问Azure Analysis Services

问题描述

我们正尝试使用托管身份从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";
}

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

“ app:appid @ tenantid”用户无权访问“示例”数据库,或者该数据库不存在

(错误消息中应用程序和租户的ID均正确)

AAS中允许管理身份,并且已经正确配置了“ AASRegion”,“ AASName”和“ TenantId”的键。

appid在AAS中具有管理员权限,并在RBAC中扮演角色。

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

解决方法

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

enter image description here

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...