我已经注册了多租户应用程序并使用仅应用程序的身份,但我们有多个租户,我们希望使用不同租户的数据(获取用户等)。我们拥有Web应用程序,新租户管理员首次使用该Web应用程序登录,并授予我们的Web应用程序访问其数据的权限。
现在,我们要吸引他们的用户,但所有问题都是,在我们配置了appsettings.json的Web api中,我已经为一个租户(在其中注册了Web应用程序)进行了配置,我们需要编写通用代码来接受不同的租户ID,并为该租户创建他们的graphserviceclient,然后我将使用graphserviceclient.users来获取其租户用户。如何在我的webApi中将其概括化?
如果放置另一个租户ID并为其租户创建graphServiceClient,我就可以获取其他租户的数据,但是我必须先对tenantId进行硬编码(并确保租户管理员允许该权限),我需要一个通用的解决方案。(而且我们不想使用委托身份)
您需要执行client credentials。必须以最简单的形状(通常是手动):
New-AzureADServicePrincipal -AppId {multi tenant app id}
https://login.microsoftonline.com/{target tenant id}/adminconsent?client_id={multi tenant app id}
New-AzureADServicePrincipalPasswordCredential -ObjectId {provisioned multi tenant app service principal object id} -CustomKeyIdentifier {identifier} -StartDate (Get-Date) -EndDate (Get-Date).AddDays(1) -Value {secret}
在auth实现中,执行以下操作来获取特定于租户的令牌并将其传递给图形客户端调用:
var app = ConfidentialClientApplicationBuilder.Create({multi tenant app id})
.WithAuthority(AzureCloudInstance.AzurePublic, {target tenant id})
.WithClientSecret({provisioned multi tenant app service principal secret})
.Build();
var result = await app.AcquireTokenForClient("htps://graph.microsoft.com/.default")
.ExecuteAsync();
因此,基本上使用tenantId将目标租户特定的详细信息定位为客户端机密(或再次是客户端凭据)。就是这样。