使用 Microsoft 图形客户端 sdk 的 AAD 用户扩展属性

AAD user extension properties using Microsoft graph client sdk

我正在尝试使用 Microsoft GraphClient sdk 获取添加到 Azure 活动目录中的用户的扩展属性。

也就是说,我需要使用 Graph 客户端执行以下命令的结果。

使用Microsoft.Graph,版本=3.4.0.0。

PS C:\WINDOWS\system32> Get-AzureADUser -ObjectId 50413382@wingtiptoys.com |select -ExpandProperty 
ExtensionProperty

Key                                                             Value
---                                                             -----
odata.metadata                                                  https://graph.windows.net/d29b7a9b- 
6edb-4720-99a8-3c5c6c3eeeb0/$metadata#directoryObjects/@Element
odata.type                                                      Microsoft.DirectoryServices.User
createdDateTime
employeeId                                                      50413382
onPremisesDistinguishedName
thumbnailPhoto@odata.mediaEditLink                              directoryObjects/8cc715a1-0698-4d1a- 
8f49-441a84b6dbc4/Microsoft.DirectoryServices.User/thumbnailPhoto
thumbnailPhoto@odata.mediaContentType                           image/Jpeg
userIdentities                                                  []
extension_10a03227b5f146ad8a0087cf0bafd627_division             
|30103611|50435526|50230396|10192257|86009851
extension_10a03227b5f146ad8a0087cf0bafd627_company              wingtiptoys Inc.
extension_10a03227b5f146ad8a0087cf0bafd627_extensionAttribute10 GF
extension_10a03227b5f146ad8a0087cf0bafd627_employeeID           50413382
extension_10a03227b5f146ad8a0087cf0bafd627_cn                   50413382
extension_10a03227b5f146ad8a0087cf0bafd627_extensionAttribute8  wingtiptoys Inc. Inc.
extension_10a03227b5f146ad8a0087cf0bafd627_extensionAttribute7  Chuck
extension_10a03227b5f146ad8a0087cf0bafd627_extensionAttribute6  US11
extension_10a03227b5f146ad8a0087cf0bafd627_extensionAttribute5  US1-Rochester, NY- Site
extension_10a03227b5f146ad8a0087cf0bafd627_extensionAttribute4  USC
extension_10a03227b5f146ad8a0087cf0bafd627_extensionAttribute2  Regular
extension_10a03227b5f146ad8a0087cf0bafd627_employeeType         ARR

感谢任何帮助。

对于这个问题,在做之前我们需要知道一件事。

powershell 命令在后端请求“Azure AD 图 api”,但不请求“Microsoft 图 api" 因为我们可以看到主机是 https://graph.windows.net....。如果使用“Microsoft graph api”,应该是https://graph.microsoft.com....

您请求的扩展只能通过“Azure AD graph api”访问,不能通过“Microsoft graph [=53=”访问]”虽然在“Microsoft graph api(get user)”的响应中有一个像 extension 的 属性。所以我们需要使用 Azure AD 图形 SDK 而不是使用 Microsoft.Graph.

根据网上搜索,关于如何使用Azure AD graph SDK的信息很少。并且在10/17/2016更新了最新版本的sdk,因为微软很久没有更新“Azure AD graph”了。我不清楚如何使用 Azure AD 图形 SDK,所以我建议您直接在代码中请求 Azure AD 图形 api。您可以参考下面我的解决方案:

1.您需要在AD中注册一个应用程序并为其添加权限(添加Azure AD图形权限但不添加Microsoft图形权限)。

2. 之后,我们可以通过下面的代码请求Azure AD图api:

using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Threading.Tasks;

namespace ConsoleApp25
{
    class Program
    {
        static async Task Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            //request for the access token
            HttpClient client = new HttpClient();
            var values = new Dictionary<string, string>
            {
                { "client_id", "<client_id>" },
                { "scope", "https://graph.windows.net/.default" },
                { "client_secret", "<client_secret>" },
                { "grant_type", "client_credentials" },
            };
            var content = new FormUrlEncodedContent(values);
            var response = await client.PostAsync("https://login.microsoftonline.com/<tenant_id>/oauth2/v2.0/token", content);
            var responseString = await response.Content.ReadAsStringAsync();

            //parse the responseString and get the access_token in it
            dynamic json = JsonConvert.DeserializeObject(responseString);
            var token = json.access_token;

            //use the access token to request the azure ad graph api
            HttpClient client1 = new HttpClient();
            client1.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);
            var response1 = await client1.GetAsync("https://graph.windows.net/<tenant_id>/users/hury@xxx.onmicrosoft.com?api-version=1.6");
            var responseString1 = await response1.Content.ReadAsStringAsync();

            Console.WriteLine(responseString1);
        }
    }
}

responseString1包含用户的所有字段,你需要解析json得到你想要的扩展