Authorization_RequestDenied:没有足够的权限来完成操作。“应用程序出错,仅在第三方AD上

时间:2017-08-02 05:56:01

标签: validation oauth-2.0 azure-active-directory microsoft-graph adal

我正在尝试通过应用程序访问流程搜索我自己和第三方Azure Active Directoriy中的用户。 我使用以下内容获取有效令牌。

string authority = string.Format(CultureInfo.InvariantCulture, "https://login.microsoftonline.com/{0}", "<AD>.onmicrosoft.com");
AuthenticationContext authContext = new AuthenticationContext(authority);
ClientCredential clientCredential = new ClientCredential(<clientId>, <appKey>);

AuthenticationResult result = await authContext.AcquireTokenAsync("https://graph.windows.net" , clientCredential);
string TokenForApplication = result.AccessToken;

我使用此方法搜索具有给定名称的用户。

public async Task<List<IUser>> UsersSearch(IActiveDirectoryClient client, string searchString)
{
    List<IUser> usersList = null;
    IPagedCollection<IUser> searchResults = null;

    IUserCollection userCollection = client.Users;
    searchResults = await userCollection.Where(user =>
        user.UserPrincipalName.StartsWith(searchString) ||
        user.GivenName.StartsWith(searchString)).Take(10).ExecuteAsync();
    usersList = searchResults.CurrentPage.ToList();

    return usersList;
}

这一切在我首次设置应用程序的Azure AD上运行良好。

但是当我尝试在另一个Azure Active目录中使用该应用程序时,我收到错误:Authorization_RequestDenied: Insufficient privileges to complete the operation."

在我原来的Azure AD中,我设置了应用访问图API并搜索用户所需的所有权限:

permissions on my own AAD

在第三方Azure AD中,我已经完成了管理流程并为应用程序授予了所有必需的权限:

Permissions for app on Third party AAD

据我所知,我获得了每个Azure AD的有效令牌,但每当我尝试访问第三方Azure AD时,我都会收到相同的错误。

我更改我尝试访问的AD的方式是更改

中的<AD>
string authority = string.Format(CultureInfo.InvariantCulture, "https://login.microsoftonline.com/{0}", "<AD>.onmicrosoft.com");

我保持其他一切。

1 个答案:

答案 0 :(得分:2)

从屏幕截图中,所选权限适用于Microsoft Graph API(https://graph.microsoft.com),但根据您的代码,您将获取Azure AD Graph API(https://graph.windows.net)的令牌。

如果要使用Azure AD Graph API,则应在多租户应用的Windows Azure Active Directory刀片中添加Required permissions的权限,并在其他AAD中执行管理员同意。

如果您想使用Microsoft Graph API,则应修改代码,使用https://graph.microsoft.com代替https://graph.windows.net