如何使用 MSAL.NET 处理多租户守护程序服务应用程序的 AppTokenCache

How to handle AppTokenCache of multi-tenant daemon service application using MSAL.NET

是否可以使用 MSAL.NET 身份验证库来处理由多租户守护程序服务应用程序(即客户端凭证授予)生成的多个 AppTokenCache

在这种情况下,我必须根据租户 ID 构建 (n) 个机密客户端应用程序,并且我需要维护令牌。

var confidentialClientApplication_001 = ConfidentialClientApplicationBuilder
                .Create(clientId)
                .WithTenantId("TenantId__001")
                .WithClientSecret(clientSecret)
                .Build();

var confidentialClientApplication_002 = ConfidentialClientApplicationBuilder
                .Create(clientId)
                .WithTenantId("TenantId__002")
                .WithClientSecret(clientSecret)
                .Build();

...
...
...

var confidentialClientApplication_999 = ConfidentialClientApplicationBuilder
                    .Create(clientId)
                    .WithTenantId("TenantId__999")
                    .WithClientSecret(clientSecret)
                    .Build();  

This document 实现单个机密客户端应用程序。

您可以在获取令牌时指定不同的租户ID。

这应该有效:

var app = ConfidentialClientApplicationBuilder.Create("client-id")
    .WithAuthority(AzureCloudInstance.AzurePublic, AadAuthorityAudience.AzureAdMultipleOrgs)
    .WithClientSecret("secret")
    .Build();

var result = await app.AcquireTokenForClient(new[]{"https://graph.microsoft.com/.default"})
    .WithAuthority(AzureCloudInstance.AzurePublic, Guid.Parse("target-tenant-id"))
    .ExecuteAsync();

所以我们指定"organizations"为app权限,然后在获取token的时候指定具体的租户。