【发布时间】:2021-09-27 04:48:38
【问题描述】:
我想做的事:使用自定义工具中的Azure REST API。
我做了什么: 我在我的默认目录中创建了一个名为 CDTester 的应用程序注册和一个秘密。然后我去订阅,将角色 Contributor 添加到 CTTester。
我从 user-secrets 加载了一个配置对象 cfg,其中包含 CDTester 的应用程序 ID 和密钥以及我的默认目录的租户 ID。
现在我尝试像这样进行身份验证:
var app = ConfidentialClientApplicationBuilder
.Create(cfg.ApplicationId)
.WithTenantId(cfg.LoginTenantId)
.WithClientSecret(cfg.ApplicationSecret)
.Build();
var authResult = await
app.AcquireTokenForClient(new[] {"https://management.azure.net/.default"})
.ExecuteAsync();
.ExecuteAsynccall 失败
"'
AADSTS500011:在名为 的租户中找不到名为 https://management.azure.net 的资源主体。如果租户管理员未安装应用程序或未获得租户中任何用户的同意,则可能会发生这种情况。您可能将身份验证请求发送给了错误的租户。”
作为(弱)替代方案,我向 CDTester 添加了Azure Service Management 委派权限,给予管理员同意,将代码切换为:
var app = PublicClientApplicationBuilder.Create(cfg.ApplicationId)
.WithTenantId(cfg.LoginTenantId)
.WithDefaultRedirectUri()
.Build();
var authResult = await app
.AcquireTokenInteractive(new[] { "https://management.azure.net/user_impersonation" })
.ExecuteAsync();
运行它,使用我自己的用户(当然是全局管理员)登录并收到相同的消息,这次是在登录后立即在浏览器中。
在此流程中将范围更改为“https://management.azure.net/.default”也不会改变任何内容。
所以,显然我需要以某种方式将资源主体“安装资源主体 https://management.azure.net”到我的租户中 - 但对于我的生活,我找不到如何。
【问题讨论】:
-
请尝试将
https://management.azure.net更改为https://management.azure.com/。 -
如果您将评论更改为答案,我会选择它作为正确答案 - 非常感谢!