2

所以我读到如果你在范围内的资源 URI 末尾添加 .default ,它将返回我们一个正确的 v1 令牌。为 MSAL 设置 protectedResourceMap 时,范围究竟应该是什么?' https://management.azure.com/.default ' 似乎不起作用。“ https://management.azure.com/user_impersonation ”也没有。

设置范围的正确方法是什么,以便在请求同意我们的应用程序时批准 Azure 管理 API?

4

1 回答 1

2

像这样使用两个斜杠:

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 对象的屏幕截图: LINQPad 中 AuthenticationResult 对象的屏幕截图

此处的示例代码: https ://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-v2-netcore-daemon

于 2019-05-21T15:18:41.727 回答