2016-05-19 18 views
3

Ich versuche herauszufinden, ob eine E-Mail-Adresse in meinem Azure AD B2C-Verzeichnis bereits vergeben ist.Einen Benutzer per E-Mail-Adresse finden

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(); 

Ich kodiere meine E-Mail-Adresse auf die gleiche Weise, wie ich meine E-Mail-Adresse codiert sehe, wenn ich alle Benutzer bekomme. Ich habe das Gefühl, dass ich in der Nähe bin, wenn es sogar möglich ist, per E-Mail-Adresse abzufragen.

Zur Zeit alle die Dinge, die ich versucht habe, entweder eine 400 oder eine 404 zurückgeben. Weiß jemand, ob es eine Möglichkeit gibt, per E-Mail-Adresse abzufragen (Anmeldename)?

EDIT

Auf einem ähnlichen Thema, versuche ich auch eine Abfrage das Kennwort eines Benutzers ohne Erfolg zu ändern. Ich denke, wenn ich die Abfrage für einen arbeiten kann, kann ich es auf dem anderen arbeiten.

Antwort

2

einen Blick auf die B2C.exe Implementierung nehmen, erhalten zuerst, dass die Arbeit: https://azure.microsoft.com/nl-nl/documentation/articles/active-directory-b2c-devquickstarts-graph-dotnet/

Sie werden feststellen, dass der Benutzer durch GUID oder durch UPN verwiesen wird, nicht per E-Mail! E-Mails sind in der Sammlung signInNames

auf E-Mail-Adresse abzufragen, müssen Sie einen Filter angeben: https://msdn.microsoft.com/en-us/library/azure/ad/graph/api/users-operations#GetUsers

Beginnen Sie mit den GetUsers (alle Benutzer erhalten), dann Passwort aktualisieren und den Filter dauern.

+0

Danke, ich habe es nicht in meine Frage aufgenommen, aber ich habe versucht, das Benutzerobjekt zu verwenden und bekomme auch keine Freude. Ich kann jedoch erfolgreich eine Liste aller Benutzer abrufen. –

+0

Können Sie Benutzer hinzufügen? Wahrscheinlich ein Problem mit dem JSon, das du gesendet hast, wie ist es? –

+0

Ja, ich kann Benutzer in Ordnung hinzufügen. Ich sende genau den erforderlichen Inhalt und der Benutzer ist in Ordnung. Ich kann auch eine GET-Anfrage für alle Benutzer machen. Die Details eines einzelnen Benutzers können jedoch nicht abgerufen werden. –

4

Da es sich um ein Odata handelt, können Sie mit der Odata-Syntax abfragen. OData Syntax 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; 

$ Filter hat den Trick

querystring [ "$ filter"] = "signInNames/any (x: x/Wert eq '[email protected]')" ;