如何在租户(而非应用程序所有者)中授权AzureAd本地客户端应用程序

本文关键字:应用程序 授权 AzureAd 客户端 所有者 | 更新日期: 2023-09-27 18:27:19

我创建了一个AzureAD本机客户端应用程序,该应用程序使用带有UserCredentials的ADAL(它最终将成为一个无头多租户窗口服务,这就是为什么我尝试使用用户凭据而不是其他流)来向AzureAD进行身份验证。此应用程序与多租户WebApi进行通信。当使用拥有该应用程序的active directory用户,甚至与同一租户内不同目录的用户一起使用时,我可以很好地运行该应用程序。然而,如果我使用来自完全不同租户的用户,我会得到以下信息:

出现Microsoft.IdentityModel.Clients.ActivitDirectory.AdalServiceException消息:引发异常:Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException,位于Microsoft.IdentiityModel.ClientsActiveDirectory.dll中附加信息:AADSTS65001:没有为"*******-****-***-***"应用程序配置访问用户信息的权限,或者该权限已过期或被吊销。

返回的客户端ID与本机客户端应用程序在WebApi的同一租户中注册时分配给该应用程序的ID相同。

听起来这个租户需要明确的权限才能访问本机客户端应用程序。目前,这只是一个测试应用程序,所以它不在库中。我看不出有什么方法可以将一个租户创建的本地客户端应用程序添加到另一个租户。如果可能的话,至少要把它添加到画廊里。

  1. Gallery中是否支持本机客户端应用程序
  2. 有没有一种方法可以在不将应用程序发布到图库的情况下,将本地客户端应用程序注册到除应用程序所有者之外的租户中

如何在租户(而非应用程序所有者)中授权AzureAd本地客户端应用程序

截至目前,库中不支持本机应用程序,但这不会对您的场景产生影响。本机应用程序需要提示用户同意,才能用于非最初创建应用程序的租户。这排除了UserCredential的使用。此外,如果您第一次收到的刷新令牌中记录了对本机应用程序的同意,则您最多可以在90天内运行该应用程序而不显示任何提示。一旦刷新令牌到期,则需要再次提示用户。如今,避免上述流程的唯一方法是在目标租户中重新创建应用程序在其原始创建租户中获得的相同设置,也就是说,在权限表中创建serviceprincipal和相关条目。这些操作只能由目标租户的管理员执行。我相信该目录正在进行一些改进,这将使这变得更容易,但我没有数据或详细信息可以共享ATM。很抱歉