您如何在应用程序所有者以外的租户中授权 AzureAd 本机客户端应用程序?

How do you authorize a AzureAd native client app in tenant other then the owner of the app?

我创建了一个 AzureAD 本机客户端应用程序,该应用程序将 ADAL 与 UserCredentials 结合使用(它最终将成为无头多租户 windows 服务,这就是我尝试使用用户凭据而不是其他流程的原因)以向 AzureAD 进行身份验证。此应用程序与多租户 WebApi 通信。当使用拥有该应用程序的活动目录用户甚至来自同一租户内不同目录的用户时,我可以 运行 该应用程序正常运行。但是,如果我使用来自完全不同的租户的用户,我会得到以下信息:

Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException发生 消息:抛出异常:'Microsoft.IdentityModel.Clients.ActiveDirectory.AdalServiceException' in Microsoft.IdentityModel.Clients.ActiveDirectory.dll 附加信息:AADSTS65001:没有为“******-****-****-****-************”配置访问用户信息的权限应用程序,或者它已过期或被撤销。

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

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

  1. 图库支持本地客户端应用程序吗?
  2. 有没有办法在应用程序所有者以外的租户中注册本机客户端应用程序,而无需将应用程序发布到库中?

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