如何使用Microsoft Graph sdk通过电子邮件地址从Active Directory中获取用户信息

时间:2019-10-03 15:24:44

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

我们想使用Microsoft Graph SDK从Azure Active目录中检索用户的信息。

提供了有效的电子邮件地址,但我收到了错误消息

  

资源“ myemailaddress@live.com”不存在,或其查询的参考属性对象之一不存在。

代码在下面。你能指导吗?

IConfidentialClientApplication confidentialClientApplication = ConfidentialClientApplicationBuilder.Create(clientId).WithTenantId(tenantID).WithClientSecret(clientSecret).Build();
ClientCredentialProvider authProvider = new ClientCredentialProvider(confidentialClientApplication);
GraphServiceClient graphClient = new GraphServiceClient(authProvider);
var user = await graphClient.Users["myemailaddress@live.com"].Request().GetAsync();

1 个答案:

答案 0 :(得分:1)

我可以重现您的问题。帐户myemailaddress@live.com在您的租户中是Guest,在门户中导航到AAD->查找该帐户->单击它并获取Object ID,然后使用{{1} },它将起作用。

Object ID

或者您可以使用var user = await graphClient.Users["<Object ID>"].Request().GetAsync(); 获取用户,在这种情况下,来宾用户的filter格式类似于UserPrincipalName,在使用过滤器时,我们需要URL对其进行编码,那么它将是myemailaddress_live.com#EXT#@tenantname.onmicrosoft.com,请尝试以下代码,它对我有效。

myemailaddress_live.com%23EXT%23%40tenantname.onmicrosoft.com

更新

如果您想通过var user = await graphClient.Users.Request().Filter("UserPrincipalName eq 'myemailaddress_live.com%23EXT%23%40tenantname.onmicrosoft.com'").GetAsync(); 吸引用户,也可以使用如下所示的url编码。

UserPrincipalName