Azure active directory 我怎样才能得到“的”呢;分配角色“;Azure Active Directory中的用户的名称?
我正在注册应用程序中使用Azure广告,我正在使用Microsoft Graph API查询广告 下面的代码告诉用户被分配到哪些组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
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);
}
}
}