我是天蓝色的陌生人。
我有一个第三方API,该API为我提供了一个userId。我编写了一个.NET Core API,该API应该带有此用户ID并获取该特定用户的角色和组。
我已经阅读了有关Microsoft图形API的信息。不确定这对我的情况是否有用。
还有其他方法可以通过编程方式访问AD用户的角色和组。
答案 0 :(得分:1)
用于获取组和角色信息的API
首先,Microsoft Graph API是获取所需信息的最佳选择。
哪种确切的API最适合您取决于您的情况(a。您是否需要顶级直接成员身份或可传递检查?b。您只需要安全组,甚至是O365组?),因此,您是最佳的判断者。
在这里我将列出其中的3个,您应该有一些想法可以选择。
获取用户直接所属的组和目录角色。
注意:仅此成员的直接成员身份很重要,请检查不传递(即,用户必须是该组的直接成员才能返回该组。如果用户是该组的成员1 ,但该group1是group2的成员,则不会返回group2。对于某些情况,此行为可能是可以的,但对于其他情况则不是)
GET /users/{id | userPrincipalName}/memberOf
POST /users/{id | userPrincipalName}/getMemberGroups
返回用户所属的所有组。请检查这是否是 Transitive ,这样您可以放心所有组都将返回。作为1个请求的一部分,最多返回2046。它也适用于O365组,您可以使用参数过滤到SecurityEnabled组
返回用户所属的所有组,目录角色和管理单元。支票再次可传递。
实施和代码示例。如何获取令牌,调用API等。
获取令牌进行身份验证
您应该使用MSAL或ADAL库,具体取决于您要针对v2使用MSAL和针对v1使用ADAL的哪个Azure AD终结点。使用这些库不是强制性的,但建议您使用,因为它们将遵循最佳实践并为您带来繁重的工作。
与Microsoft Graph API端点进行交互
由于您是用.NET编写的,因此可以使用Microsoft Graph Client Library for .NET (SDK)。同样,使用客户端库不是强制性的,但是它将使您的代码更具声明性,并且更加方便。您始终可以与HttpClient一起使用,并根据需要直接访问REST端点。
代码示例
Microsoft Graph Connect Sample for ASP.NET Core 2.1
重要部分。请查看GraphService.cs文件,以获取获取用户信息的方法,例如
// Load user's profile in formatted JSON.
public static async Task<string> GetUserJson(GraphServiceClient graphClient, string email, HttpContext httpContext)
{
if (email == null) return JsonConvert.SerializeObject(new { Message = "Email address cannot be null." }, Formatting.Indented);
try
{
// Load user profile.
var user = await graphClient.Users[email].Request().GetAsync();
return JsonConvert.SerializeObject(user, Formatting.Indented);
}
注意:该示例使用委派的权限。您可能需要直接使用应用程序权限或代表流(如果要在用户的上下文中进行操作),因为您提到的是被调用的API。另外,这只是示例之一,您应该查看它们以了解如何使用SDK,但是一旦开始深入研究Microsoft Graph API和客户端库文档,就会有许多可用的示例。如果找到更接近您实际情况的样本,我将更新答案。