我正在尝试通过应用程序访问流程搜索我自己和第三方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并搜索用户所需的所有权限:
在第三方Azure AD中,我已经完成了管理流程并为应用程序授予了所有必需的权限:
据我所知,我获得了每个Azure AD的有效令牌,但每当我尝试访问第三方Azure AD时,我都会收到相同的错误。
我更改我尝试访问的AD的方式是更改
中的<AD>
string authority = string.Format(CultureInfo.InvariantCulture, "https://login.microsoftonline.com/{0}", "<AD>.onmicrosoft.com");
我保持其他一切。
答案 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
。