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

时间:2020-07-23 19:18:28

标签: c# azure-active-directory microsoft-graph-api microsoft-graph-sdks

我正在尝试使用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

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

对于这个问题,我们需要先知道一件事。

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

您请求的扩展只能通过“ Azure AD graph api ”访问,而不能通过“ Microsoft graph api ”访问,尽管存在类似{{1 }}响应“ Microsoft graph api (获取用户)”。因此,我们需要使用Azure AD图SDK,而不要使用extension

根据Internet上的搜索,几乎找不到有关如何使用Azure AD图形SDK的信息。并且最新版本的sdk已在Microsoft.Graph上进行了更新,因为Microsoft很长时间没有更新“ Azure AD图”。我不清楚如何使用Azure AD图SDK,因此建议您直接在代码中请求Azure AD图API。您可以在下面参考我的解决方案:

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

enter image description here

enter image description here

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

10/17/2016

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); } } } 包含用户的所有字段,您需要解析json并获取所需的扩展名。