2016-05-19 3 views
3

Я пытаюсь выяснить, был ли уже отправлен адрес электронной почты в моем каталоге B2C Azure AD.Найти пользователя по адресу электронной почты

var token = await this.GetTokenAsync(); 

var client = new HttpClient(); 

var id = HttpUtility.UrlEncode("adrian_mydomain.com#EXT#@xxxxxxxxx.onmicrosoft.com"); 
////var id = HttpUtility.UrlEncode("[email protected]"); // 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. Кто-нибудь знает, есть ли способ запроса по электронной почте (имя входа)?

EDIT

На подобную тему, я также пытаюсь запрос изменить пароль пользователя безрезультатно. Я полагаю, что если я могу заставить запрос работать для одного, я могу заставить его работать на другом.

ответ

2

Посмотрите на реализацию B2C.exe, первым получить эту работу: https://azure.microsoft.com/nl-nl/documentation/articles/active-directory-b2c-devquickstarts-graph-dotnet/

Вы заметите, что пользователь ссылается GUID или UPN, а не по электронной почте! сообщения электронной почты находятся в коллекции signInNames

Для запроса на адрес электронной почты, вам нужно будет указать фильтр: https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/users-operations#GetUsers

Начать с GetUsers (чтобы получить всех пользователей), а затем обновить пароль и последний фильтр.

+0

Спасибо, я не включил его в свой вопрос, но я попытался использовать пользовательский объект и не испытываю никакой радости. Однако я могу успешно получить список всех пользователей. –

+0

Добавили пользователей? Скорее всего, проблема с json, которую вы отправили, каково это? –

+0

Да, я могу добавить пользователей в порядке. Я отправляю точно требуемое содержимое, и пользователь создается отлично. Я также могу выполнить запрос GET для всех пользователей. Но все равно невозможно получить детали одного пользователя. –

4

Поскольку это одата, вы можете запросить синтаксис odata. Синтаксис OData here

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

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

$ Фильтр сделал трюк

QueryString [ "$ фильтра"] = "signInNames/любой (х: х/значение экв '[email protected]')" ;