通过电子邮件地址查找用户

时间:2016-05-19 15:29:34

标签: azure azure-ad-b2c azure-ad-graph-api

我正在尝试查看我的Azure AD B2C目录中是否已收到电子邮件地址。

var token = await this.GetTokenAsync();

var client = new HttpClient();

var id = HttpUtility.UrlEncode("adrian_mydomain.com#EXT#@xxxxxxxxx.onmicrosoft.com");
////var id = HttpUtility.UrlEncode("adrian@mydomain.com"); // This also fails.
////var id = HttpUtility.UrlEncode("adrian_mydomain.com#EXT#"); // This also fails.
////var id = "xxxx-xxxx-xxxxxxxx-xxxxxxxxxx"; // This also fails (user object id).

var resource = $"{this.graphConfig.GraphUri}/{this.graphConfig.Tenant}/users/{id}?api-version=1.6";
//// This line below works, it returns all the users, so I do know the token is good and the resource URI is valid, etc.
////var resource = $"{this.graphConfig.GraphUri}/{this.graphConfig.Tenant}/users?api-version=1.6";

var request = new HttpRequestMessage(HttpMethod.Get, resource);
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token);

var response = await client.SendAsync(request);
var content = await response.Content.ReadAsStringAsync();

我编码我的电子邮件地址的方式与我收到所有用户时看到的电子邮件地址编码的方式相同。我觉得我很接近,如果甚至可以通过电子邮件地址查询。

目前我尝试过的所有内容都返回400或404.有没有人知道是否有办法通过电子邮件地址查询(登录名称)?

修改

在类似的主题上,我也在尝试查询来更改用户的密码无效。我想如果我可以让查询工作一个,我可以让它在另一个工作。

4 个答案:

答案 0 :(得分:6)

由于它是odata,您可以使用odata语法进行查询。 Odata语法here

var queryString = HttpUtility.ParseQueryString(string.Empty);
queryString["api-version"] = "1.6";
queryString["$filter"] = "signInNames/any(x:x/value eq 'paule@test.in')";

string url = "https://graph.windows.net/" + tenant + "/users"+ "?" + queryString;

$ filter做了这个伎俩

queryString [“$ filter”] =“signInNames / any(x:x / value eq'paule@test.co.uk')”;

答案 1 :(得分:3)

看看B2C.exe的实现,首先让它工作: https://azure.microsoft.com/nl-nl/documentation/articles/active-directory-b2c-devquickstarts-graph-dotnet/

您会注意到GUIDUPN引用了该用户,而不是通过电子邮件引用! 电子邮件位于集合signInNames

要查询电子邮件地址,您需要指定一个过滤器: https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/users-operations#GetUsers

从GetUsers开始(获取所有用户),然后更新密码并持续过滤。

答案 2 :(得分:0)

我也在尝试通过其登录名/电子邮件地址查找用户。

这是我的(模糊的XXXX)查询字符串:

"https://graph.windows.net/XXXX.onmicrosoft.com/users?api-version=1.6&$filter=signInNames/any(x: x/value eq 'dd.rrr@XXXX.com')"

它没有错误,但是没有找到用户(我知道那个用户,因为GetAllUsers找到了它)。

但是,查看用户详细信息,我可以看到:

"showInAddressList": null,
"signInNames": [],
"sipProxyAddress": null,

这可能是搜索为什么不起作用的线索吗?

用户怎么没有signInName

答案 3 :(得分:0)

signInNames不是存储电子邮件的唯一位置。也可以是userPrincipalName或otherMails。您将要使用以下查询在所有可能的字段中搜索电子邮件。

/users?api-version=1.6&$filter=otherMails/any(x:x eq '{email}') or userPrincipalName eq '{email}' or signInNames/any(x:x/value eq '{email}')