使用托管标识和基于令牌的登录从 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
我们正在尝试使用托管标识从 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