所以我读到如果你在范围内的资源 URI 末尾添加 .default ,它将返回我们一个正确的 v1 令牌。为 MSAL 设置 protectedResourceMap 时,范围究竟应该是什么?' https://management.azure.com/.default ' 似乎不起作用。“ https://management.azure.com/user_impersonation ”也没有。
设置范围的正确方法是什么,以便在请求同意我们的应用程序时批准 Azure 管理 API?
所以我读到如果你在范围内的资源 URI 末尾添加 .default ,它将返回我们一个正确的 v1 令牌。为 MSAL 设置 protectedResourceMap 时,范围究竟应该是什么?' https://management.azure.com/.default ' 似乎不起作用。“ https://management.azure.com/user_impersonation ”也没有。
设置范围的正确方法是什么,以便在请求同意我们的应用程序时批准 Azure 管理 API?
像这样使用两个斜杠:
https://management.core.windows.net//.default
“这是因为 ARM API 需要在其受众声明 (aud) 中使用斜线,然后使用斜线将 API 名称与范围分开。 ”
来源: https ://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Adal-to-Msal
这是一个完整的例子:
void Main()
{
var tenantId = "<tenantId>";
var clientId = "<clientId>";
var clientSecret = "<clientSecret>";
var credentials = GetCredentials(tenantId, clientId, clientSecret);
Console.WriteLine(credentials);
}
public static async Task<AuthenticationResult> GetCredentials(string tenantId, string clientId, string clientSecret)
{
string authority = $"https://login.microsoftonline.com/{tenantId}/";
IConfidentialClientApplication app;
app = ConfidentialClientApplicationBuilder.Create(clientId)
.WithClientSecret(clientSecret)
.WithAuthority(new Uri(authority))
.Build();
IEnumerable<string> scopes = new List<string>() { "https://management.core.windows.net//.default" };
var result = await app.AcquireTokenForClient(scopes)
.ExecuteAsync();
return result;
}
LINQPad 中 AuthenticationResult 对象的屏幕截图:
此处的示例代码: https ://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-netcore-daemon