如何使用其他租户的Azure AD应用程序?

时间:2017-04-14 10:08:14

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

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

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

  

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

     

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

     

AADSTS70001:带有标识符&x; xxxxxxxx-xxx-xxx-xxxx-xxxxxxxxxxxx'的应用程序找不到目录XXXXXXX.onmicrosoft.com

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

该应用程序已注册为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订阅'我不知道?

简而言之:如何让其他租户使用它?

修改:我尝试手动添加"提示= admin_consent"对于请求,像这样:

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

但是它会触发一个错误,说明有一个"重复的查询参数'提示'在extraQueryParameters"

1 个答案:

答案 0 :(得分:4)

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

这些目前(截至2017-04-14)被创建为单租户应用程序。由于Azure门户网站没有公开"多租户"切换到本机客户端应用程序,您需要更新应用程序清单或使用Azure AD PowerShell执行此操作。

从清单中制作应用程序多租户

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

    enter image description here

  2. availableToOtherTenants值更新为true

    enter image description here

  3. 保存清单。

    enter image description here

  4. 使用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
      
    3. 应该修补它。稍等一下,然后再试一次。