如何使用其他租户的 Azure AD 应用程序?
How can I use my Azure AD app from another tenant?
我正在开发一个本机应用程序,它必须显示用户所属的 Office 365 组。为此,我调用需要身份验证的 Microsoft Graph API。我正在使用 ADAL 库。
所需的权限需要管理员同意。
我租户的用户一切正常,但是当我尝试使用另一个租户的帐户进行身份验证时,它不起作用。它一直给出这个结果:
Correlation ID: 9780ed24-9d24-4604-b8bf-28a02c2ea580
Timestamp: 2017-04-14 12:05:45Z
AADSTS70001: Application with identifier 'xxxxxxxx-xxx-xxx-xxxx-xxxxxxxxxxxx' was not found in the directory XXXXXXX.onmicrosoft.com
即使我在第一次连接时使用管理员帐户。我从未征求过同意,并且该应用程序未在其他租户上注册。
该应用程序注册为本机,因此它应该是多租户的,我将“/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;
}
是不是代码内部的问题?参数?其他租户需要一些我不知道的 'special azure subscription' 吗?
简而言之:我如何让它为其他租户工作?
Edit :我尝试手动将“提示=admin_consent”添加到请求中,如下所示:
AuthenticationResult authResult = authContext.AcquireToken(graphResource, clientID, redirectURI,PromptBehavior.RefreshSession, UserIdentifier.Any, "prompt=admin_consent");
但它触发了一个错误,指出在 extraQueryParameters 中存在“重复的查询参数 'prompt'”
这是新 Azure 门户中注册本机客户端应用程序时的一个已知问题。
这些目前(截至 2017-04-14)被创建为单租户应用程序。由于 Azure 门户不公开本机客户端应用程序的 "multi-tenant" 开关,您需要更新应用程序清单或使用 Azure AD PowerShell 来执行此操作。
从清单中创建应用多租户
在 Azure 门户中,从本机客户端应用程序的设置边栏选项卡中,单击 Manifest 选项。
将 availableToOtherTenants
值更新为 true
。
保存清单。
使用 Azure AD PowerShell 使应用程序成为多租户
- 下载 Azure AD PowerShell v2 模块 (AzureAD):https://docs.microsoft.com/en-us/powershell/azure/install-adv2?view=azureadps-2.0
运行以下:
$appId = "<app ID>"
$app = Get-AzureADApplication -Filter "appId eq '$appId'"
Set-AzureADApplicatoin -ObjectId $app.ObjectId -AvailableToOtherTenants $true
应该修补它。稍等一下,然后重试。
我正在开发一个本机应用程序,它必须显示用户所属的 Office 365 组。为此,我调用需要身份验证的 Microsoft Graph API。我正在使用 ADAL 库。
所需的权限需要管理员同意。 我租户的用户一切正常,但是当我尝试使用另一个租户的帐户进行身份验证时,它不起作用。它一直给出这个结果:
Correlation ID: 9780ed24-9d24-4604-b8bf-28a02c2ea580
Timestamp: 2017-04-14 12:05:45Z
AADSTS70001: Application with identifier 'xxxxxxxx-xxx-xxx-xxxx-xxxxxxxxxxxx' was not found in the directory XXXXXXX.onmicrosoft.com
即使我在第一次连接时使用管理员帐户。我从未征求过同意,并且该应用程序未在其他租户上注册。
该应用程序注册为本机,因此它应该是多租户的,我将“/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;
}
是不是代码内部的问题?参数?其他租户需要一些我不知道的 'special azure subscription' 吗?
简而言之:我如何让它为其他租户工作?
Edit :我尝试手动将“提示=admin_consent”添加到请求中,如下所示:
AuthenticationResult authResult = authContext.AcquireToken(graphResource, clientID, redirectURI,PromptBehavior.RefreshSession, UserIdentifier.Any, "prompt=admin_consent");
但它触发了一个错误,指出在 extraQueryParameters 中存在“重复的查询参数 'prompt'”
这是新 Azure 门户中注册本机客户端应用程序时的一个已知问题。
这些目前(截至 2017-04-14)被创建为单租户应用程序。由于 Azure 门户不公开本机客户端应用程序的 "multi-tenant" 开关,您需要更新应用程序清单或使用 Azure AD PowerShell 来执行此操作。
从清单中创建应用多租户
在 Azure 门户中,从本机客户端应用程序的设置边栏选项卡中,单击 Manifest 选项。
将
availableToOtherTenants
值更新为true
。保存清单。
使用 Azure AD PowerShell 使应用程序成为多租户
- 下载 Azure AD PowerShell v2 模块 (AzureAD):https://docs.microsoft.com/en-us/powershell/azure/install-adv2?view=azureadps-2.0
运行以下:
$appId = "<app ID>" $app = Get-AzureADApplication -Filter "appId eq '$appId'" Set-AzureADApplicatoin -ObjectId $app.ObjectId -AvailableToOtherTenants $true
应该修补它。稍等一下,然后重试。