【发布时间】:2021-06-18 06:00:55
【问题描述】:
在我们的 powerapps 使用情况的合规性监控应用程序的范围内,我们创建了一个 C# 控制台应用程序来抓取 powerapps。
- 环境
- 应用程序
- 权限
(与Microsoft.PowerApps.Administration cmdlets提供的powershell命令Get-AdminPowerAppEnvironmentGet-AdminPowerApp类似的REST调用)
通过在连接到我的管理员 AAD 帐户时从提琴手那里窃取 Bearer 标头来完成概念验证。 POC 现在已经过验证,是时候清理它了。与 AAD 身份验证流程(对我而言)一样,它比预期的要复杂得多(尝试和失败的时间总和)。
我发现关于如何验证和抓取(这部分没问题)这个 API 的互联网参考资料非常少。
我尝试了不同的身份验证工作流程和库
- MSAL
- ADAL
- powershell 命令之上的提琴手(但在 powershell 中我没有使用服务主体)
要么我找不到正确的范围,要么我的服务主体对资源没有权限。
string authority = $"https://login.microsoftonline.com/[tenant-guid]/";
var app = ConfidentialClientApplicationBuilder
.CreateWithApplicationOptions(new ConfidentialClientApplicationOptions { ClientId = "[client-id]", ClientSecret = "[shhuuuu]" })
.WithAuthority(authority).Build();
// tried with https://management.azure.com/.default / https://api.bap.microsoft.com/.default / https://service.powerapps.com./default
var token = app.AcquireTokenForClient(new[] { "https://management.azure.com/.default" }).ExecuteAsync().Result;
//var client = new RestClient("https://api.bap.microsoft.com/providers/Microsoft.BusinessAppPlatform/scopes/admin/environments?api-version=2016-11-01");
var client = new RestClient("https://management.azure.com/providers/Microsoft.BusinessAppPlatform/scopes/admin/environments?api-version=2016-11-01");
var request = new RestRequest(Method.GET);
request.AddHeader("Authorization", "Bearer " + token.AccessToken);
IRestResponse response = client2.Execute(request);
我得到一个令牌,但不幸的是,我认为它不在正确的范围/资源上。 根据范围,我要么得到
- 禁止
{"error":
{"code":"Forbidden","message":"The service principal with id '[service principal guid (not client id)'
for application <null> does not have permission to access the path 'https://api.bap.microsoft.com:11779/providers/Microsoft.BusinessAppPlatform/scopes/admin/environments?api-version=2016-11-01' in tenant [tenant-guid]."}}
或
- 未经授权
{"error":{"code":"AuthenticationFailed","message":"Authentication failed."}}
【问题讨论】:
-
我可以知道您的screenshot 中的“PowerApps 服务”资源是什么吗?我无法从我的 AAD 中找到它。如果它正是您尝试访问的资源,则应添加 Application Permission 而不是 Delegated Permission,因为服务主体使用 Application Permission。
-
添加 powerapps 服务更像是一个绝望的举动测试。根据名为“api.bap.microsoft.com/providers/Microsoft.BusinessAppPlatform/…”的 REST 端点,我更认为实际的 API 是 Azure 服务管理。 “应用程序权限”相当委派是有道理的,但它是灰色的。我试图在清单中找到有关 appRoles 配置的文章,但我知道它仅适用于自定义 API,这不是我的情况。
-
我认为这不是 Azure 服务管理。 Azure 服务管理用于调用 Azure 资源。通常我们可以给服务主体分配一个 RBAC 角色来给它应用权限。但 PowerApps 不会出现在 Azure 资源下。基于这个package,我看到了
"api.bap.microsoft.com" = "https://service.powerapps.com/"。看起来https://service.powerapps.com是资源端点。但我仍然找不到我们可以为其分配权限的位置。 -
对您提供的链接感兴趣,因此感觉从“常规”AAD 方式(应用注册等)切换到与 ADAL/identitymodel (XRM) 关联的“经典”非交互式管理员帐户.跟进您的链接,我发现了这个有趣的回购:github.com/microsoft/PowerApps-Samples/blob/master/cds/webapi/… 将检查是否可能从那里“窃取”正确的令牌。不幸的是,我将不得不等待,因为我们的帐户默认需要 MFA/2 身份验证,我需要戳我们的管理员。
标签: azure-active-directory powerapps