【问题标题】:How can I use my Azure AD app from another tenant?如何使用来自其他租户的 Azure AD 应用程序?
【发布时间】:2017-09-10 14:10:23
【问题描述】:

我正在开发一个本机应用程序,该应用程序必须显示用户所属的 Office 365 组。为此,我调用了需要身份验证的 Microsoft Graph API。我正在使用 ADAL 库。

所需的权限需要管理员同意。 我的租户的用户一切正常,但是当我尝试使用另一个租户的帐户进行身份验证时,它不起作用。它不断给出这个结果:

相关 ID:9780ed24-9d24-4604-b8bf-28a02c2ea580

时间戳:2017-04-14 12:05:45Z

AADSTS70001:在目录 XXXXXXX.onmicrosoft.com 中找不到标识符为“xxxxxxxx-xxx-xxx-xxxx-xxxxxxxxxxxx”的应用程序

即使我在第一次连接时使用管理员帐户。从未征求我的同意,并且该应用未在其他租户上注册。


应用程序注册为 Native,所以它应该是多租户的,我在权限中将“/common”作为租户传递。

我还尝试在另一个租户上注册一个具有相同规格的应用程序,并在权限上给予管理员同意,并且效果也很好。

这是我检索访问令牌的方法:

private static string GetAccessToken()
    {
        AuthenticationContext authContext = new AuthenticationContext(authority);

        AuthenticationResult authResult = authContext.AcquireToken(graphResource, clientID, redirectURI, PromptBehavior.RefreshSession);
        var accessToken = authResult.AccessToken;
        return accessToken;
    }

是不是代码有问题?参数有问题?其他租户是否需要一些我不知道的“特殊 Azure 订阅”?

简而言之:我如何让它为其他租户工作?

编辑:我尝试手动将“prompt=admin_consent”添加到请求中,如下所示:

AuthenticationResult authResult = authContext.AcquireToken(graphResource, clientID, redirectURI,PromptBehavior.RefreshSession, UserIdentifier.Any, "prompt=admin_consent");

但它会触发一个错误,提示“extraQueryParameters 中存在重复的查询参数'提示'”

【问题讨论】:

  • 能否包含错误消息中的 CorrelationId 和 Timestamp?
  • @PhilippeSignoret 是的,完成。
  • 您是如何创建本机客户端应用程序的?什么界面?
  • @PhilippeSignoret 这是一个 .net winform 应用程序。
  • @PhilippeSignoret 哦,好的,对不起。我使用了 Azure 门户 portal.azure.com,你是这个意思吗?

标签: .net azure multi-tenant microsoft-graph-api adal


【解决方案1】:

这是注册本机客户端应用程序时新 Azure 门户中的一个已知问题。

这些目前(截至 2017 年 4 月 14 日)被创建为单租户应用程序。由于 Azure 门户不公开本机客户端应用程序的“多租户”切换,因此您需要更新应用清单或使用 Azure AD PowerShell 来执行此操作。

根据清单创建应用多租户

  1. 在 Azure 门户中,从本机客户端应用程序的设置刀片中,单击 Manifest 选项。

  2. availableToOtherTenants 值更新为true

  3. 保存清单。

使用 Azure AD PowerShell 制作应用多租户

  1. 下载 Azure AD PowerShell v2 模块 (AzureAD):https://docs.microsoft.com/en-us/powershell/azure/install-adv2?view=azureadps-2.0
  2. 运行以下命令:

    $appId = "<app ID>"
    $app = Get-AzureADApplication -Filter "appId eq '$appId'"
    Set-AzureADApplicatoin -ObjectId $app.ObjectId -AvailableToOtherTenants $true
    

那应该修补它。请稍等,然后重试。

【讨论】:

  • 成功了,非常感谢!当我检查清单时,“AvailableToOtherTenants”确实为“假”。谁会知道?特别是因为到目前为止我发现的每个文档都声明本机应用程序是自动多租户的。
  • 它们应该默认被创建为多租户。这是新(预览)门户中的一个已知问题。很快就会解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-12
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多