获取每个应用程序的所有用户Azure Active Directory.NET Web Api C#

获取每个应用程序的所有用户Azure Active Directory.NET Web Api C#,c#,azure,azure-active-directory,azure-ad-graph-api,C#,Azure,Azure Active Directory,Azure Ad Graph Api,我正在尝试使用.NET Web API C#访问Azure Active Directory中我的应用程序中的用户。 我已尝试从客户端获取用户: await this.aadClient.Users.ExecuteAsync() 但它可以让所有的用户在广告中,而不是每个应用程序。 我已尝试获取应用程序的成员: var apps = await this.aadClient.Applications.Where(x => x.AppId == this.appId)

我正在尝试使用.NET Web API C#访问Azure Active Directory中我的应用程序中的用户。 我已尝试从客户端获取用户:

await this.aadClient.Users.ExecuteAsync()
但它可以让所有的用户在广告中,而不是每个应用程序。 我已尝试获取应用程序的成员:

var apps = await this.aadClient.Applications.Where(x => x.AppId == this.appId)
                                    .Expand(x => x.Members).ExecuteAsync();
var app = apps.CurrentPage.FirstOrDefault();
var members = app.Members.CurrentPage;
但是结果总是空的,尽管appId是正确的,并且我在应用程序中有19个用户

有人知道问题出在哪里吗


编辑 获取客户端:

var context = new AuthenticationContext($"https://login.microsoftonline.com/[tenant]", false);

var aadClient = new ActiveDirectoryClient(
                new Uri(new Uri("https://graph.windows.net"), [tenant]),
                async () => await context.AcquireTokenAsync("https://graph.windows.net", new ClientCredential([clientId], [clientSecret])));

ad graph客户端调用ad graph api,将分配的用户分配到应用程序的api是

https://graph.windows.net/{tenant}/servicePrincipals/{servicePrincipalId}6f/appRoleAssignedTo
所以代码应该是

aadClient.ServicePrincipals.GetByObjectId("").AppRoleAssignedTo
您可以在下面找到servicePrincipalId服务。它是企业应用程序的ObjectId

目录。已读。需要所有
权限。单击应用程序注册->查找您的应用程序(与clientId提供的应用程序相同)->API权限

请记住单击“授予管理员同意”按钮,因为此权限需要管理员同意

更新: 我可以成功地将用户分配到应用程序,下面是测试代码

using System;
using System.Threading.Tasks;
using Microsoft.Azure.ActiveDirectory.GraphClient;
using Microsoft.IdentityModel.Clients.ActiveDirectory;

namespace ConsoleApp13
    {
        class Program
        {
            static void Main(string[] args)
            {
                Uri servicePointUri = new Uri("https://graph.windows.net");
                Uri serviceRoot = new Uri(servicePointUri, "{tenant}");  
                var aadClient = new ActiveDirectoryClient(
                                serviceRoot,
                                 getToken);

                var a = aadClient.ServicePrincipals.GetByObjectId("{objectId}").AppRoleAssignedTo.ExecuteAsync().Result;
                Console.WriteLine(a.CurrentPage.Count);

            }

            public static async Task<string> getToken()
            {
                var context = new AuthenticationContext($"https://login.microsoftonline.com/{tenant}", false);
                return context.AcquireTokenAsync("https://graph.windows.net", new ClientCredential("{client_id}", "{client_secret}")).Result.AccessToken;
            }
        }
    }
使用系统;
使用System.Threading.Tasks;
使用Microsoft.Azure.ActiveDirectory.GraphClient;
使用Microsoft.IdentityModel.Clients.ActiveDirectory;
名称空间控制台AP13
{
班级计划
{
静态void Main(字符串[]参数)
{
Uri servicePointUri=新Uri(“https://graph.windows.net");
Uri serviceRoot=新Uri(servicePointUri,{tenant});
var aadClient=新的ActiveDirectoryClient(
serviceRoot,
格托肯);
var a=aadClient.ServicePrincipals.GetByObjectId(“{objectId}”).ApprovaliseSignedTo.ExecuteAsync().Result;
Console.WriteLine(a.CurrentPage.Count);
}
公共静态异步任务getToken()
{
var context=新的AuthenticationContext($”https://login.microsoftonline.com/{租户}”,假);
返回上下文。AcquireTokenAsync(“https://graph.windows.net,新客户端凭据(“{client\u id}”,“{client\u secret}”))。Result.AccessToken;
}
}
}
确保您已授予应用程序的
Directory.Read.All
权限。您可以通过在访问令牌中进行检查


用户处于AAD下,您认为应用程序中的用户是什么意思?所有者?不,不是所有者。您可以将用户添加到客户端应用程序(企业应用程序选项卡),因此,只有这些用户才能登录。在这种情况下,我们可以有一个目录,但有多个应用程序。我只想针对一个应用程序中的用户。我明白了,应该是
https://graph.windows.net/{tenant}/servicePrincipals/{servicePrincipalId}6f/approvallessignedto
。你可以参考应该是什么?我不明白。我只是找到了graph api,它将返回分配给应用程序的用户。还没有使用graph client对其进行测试。稍后将进行测试。同样的问题。成员是一个空列表。@SamySammour所以没有错误,只返回一个空列表,对吗?是的,与我在旧代码中得到的相同。“使用NuGet软件包中的客户端.应用程序”@samysamour您是否已授予
目录.Read.All
对您的应用程序的权限,并单击
授予管理员许可
?是的,我授予了。不幸的是,情况也一样。