Azure active directory 我怎样才能得到“的”呢;分配角色“;Azure Active Directory中的用户的名称?

Azure active directory 我怎样才能得到“的”呢;分配角色“;Azure Active Directory中的用户的名称?,azure-active-directory,microsoft-graph-api,Azure Active Directory,Microsoft Graph Api,我正在注册应用程序中使用Azure广告,我正在使用Microsoft Graph API查询广告 下面的代码告诉用户被分配到哪些组 var memberof = await graphClient.Users[xxx].MemberOf.Request().GetAsync(); 我使用的是标准的广告包,似乎群体受到了一定的限制,我需要购买“高级广告包”来充分利用它们 所以我不想使用组信息。我对我分配给我的用户的角色感兴趣,这些角色我已经放在我的应用程序清单中 e、 g 那么,如何使用Grap

我正在注册应用程序中使用Azure广告,我正在使用Microsoft Graph API查询广告

下面的代码告诉用户被分配到哪些组

var memberof = await graphClient.Users[xxx].MemberOf.Request().GetAsync();
我使用的是标准的广告包,似乎群体受到了一定的限制,我需要购买“高级广告包”来充分利用它们

所以我不想使用组信息。我对我分配给我的用户的角色感兴趣,这些角色我已经放在我的应用程序清单中

e、 g

那么,如何使用Graph Api告诉我用户是否具有特定角色?

1。微软图形API 读取分配给用户的所有特定于应用程序的角色(即批准)的功能仅作为Microsoft Graph API beta endpoint当前AFAIK的一部分可用。这不是v1.0的一部分。您可以阅读有关版本的信息

从“beta”这个名称可以明显看出,它不应该是一个稳定的版本,可以用于生产应用程序。阅读中的更多具体要点

精确API():

我尝试使用GraphServiceClient(.NET SDK for Microsoft Graph),但找不到任何与批准相关的内容。(可能是因为SDK使用的元数据来自稳定的1.0版本,而不是测试版)

在任何情况下,如果您仍然可以测试这一点,请使用Microsoft Graph Explorer或直接从C#代码调用端点

2.WindowsAzure广告图形API 尽管建议尽可能使用Microsoft Graph API,但仍有一些情况下Microsoft Graph尚未赶上,因此您不得不使用Azure AD Graph API。与应用程序管理相关的案例就是其中的一些

所以你可以使用这个Azure广告图API。我很快从中测试了它,效果很好

https://graph.windows.net/{yourtenantid}/users/{id}/appRoleAssignments?api-version=1.6
就像Microsoft Graph Library for.NET一样,您可以使用它,并且您的代码将如下所示

aadgraphClient.Users["<user guid>"].AppRoleAssignments;
aadgraphClient.Users[“”].approvalsignments;

另一方面,由于您专门针对Microsoft Graph API提出了这个问题,因此我相应地回答了这个问题

至少对于当前已登录应用程序的用户,您始终可以从中找到分配给他们的,作为Azure Active Directory访问令牌的一部分

不过,这只对当前用户的角色有帮助,如果您试图为应用程序跨越所有用户,则在管理类场景中没有帮助。下面的示例读取角色声明,并根据当前登录用户的应用程序角色进行授权


我刚刚找到了一种在应用程序级别获取用户角色的方法

您可以通过更新清单的Approvles数组来创建应用程序级角色

[azure/app registrations/<your-app>/manifest)]
上面的查询将获取用户的所有应用程序角色

var appRoleAssignments = await _Client.ServicePrincipals[<<application_objectId>>].Request().GetAsync();
var approvalsignments=wait_Client.ServicePrincipals[].Request().GetAsync();
上述查询将获取在清单级别分配的应用程序的所有角色

And application object Id could be found at [azure/app registrations/<your-app>)] -> Object ID
和应用程序对象Id可在[azure/app registrations/)]->对象Id中找到
并执行以下命令以获取用户角色列表

var roles = new List<string>();
if (appRoleAssignments != null && appRoleAssignments.AppRoles.Any())
{
        var userRolesOfCurrentResource = userRoles.First(role => role.ResourceId == Guid.Parse(<<application object id>>));
        if(userRolesOfCurrentResource!=null)
        {
              var role = appRoleAssignments.AppRoles.First(role => role.Id == userRolesOfCurrentResource.AppRoleId);
              if (role!=null)
              {
                  roles.Add(role.Value);
              }
        }
 }
var角色=新列表();
if(approvalsignments!=null&&approvalsignments.approvles.Any())
{
var userRolesOfCurrentResource=userRoles.First(role=>role.ResourceId==Guid.Parse());
if(userRolesOfCurrentResource!=null)
{
var role=approvalsignments.approvles.First(role=>role.Id==userRolesOfCurrentResource.approvleId);
if(角色!=null)
{
roles.Add(role.Value);
}
}
}

这看起来很棒,谢谢你花这么多时间在这上面。我应该尽快抽空测试那个beta端点,希望我能标记为被接受的答案。谢谢,这很有效!我使用的是beta端点,值得注意的是,虽然只是appRole.Id,但您没有得到appRole.value,因此它需要从清单中手动映射。@rohisaigal,感谢您提供详细的答案。有没有办法在C#中使用Azure AD Graph查找租户的所有角色?我的api调用是{tenant_Id}/roleasignments。在C#级,GraphClient类似乎没有角色分配的任何定义。作为我对你问题回答的一部分,我已经详细解释了。。
var userRoles = await _client.Me.AppRoleAssignments.Request().GetAsync();
var appRoleAssignments = await _Client.ServicePrincipals[<<application_objectId>>].Request().GetAsync();
And application object Id could be found at [azure/app registrations/<your-app>)] -> Object ID
var roles = new List<string>();
if (appRoleAssignments != null && appRoleAssignments.AppRoles.Any())
{
        var userRolesOfCurrentResource = userRoles.First(role => role.ResourceId == Guid.Parse(<<application object id>>));
        if(userRolesOfCurrentResource!=null)
        {
              var role = appRoleAssignments.AppRoles.First(role => role.Id == userRolesOfCurrentResource.AppRoleId);
              if (role!=null)
              {
                  roles.Add(role.Value);
              }
        }
 }