2017-10-26 2 views
2

Ich spiele mit Microsoft Graph, um über meine Anwendung auf Azure Active Directory zuzugreifen und die REST-API direkt (ohne SDK) zu verwenden.Abrufen eines Gastbenutzers nach userPrincipalName mit Microsoft Graph

Nach dem documentation, sollte ich in der Lage sein, einen Benutzer abzurufen aus ihren id oder userPrincipalName/users/{id | userPrincipalName} verwenden.

Dies funktioniert zwar, aber nicht für Gastbenutzer. Bei Gastbenutzern ist userPrincipalName etwas wie name_originaldomain#EXT#@mydomain.onmicrosoft.com und versucht, die Benutzerergebnisse in eine 404 Not Found zu erhalten.

Dies ist der Code, ich bin derzeit mit:

graphClient = new HttpClient(); 
graphClient.BaseAddress = new Uri("https://graph.microsoft.com/v1.0/"); 
graphClient.DefaultRequestHeaders.Add("Authorization", $"{token.TokenType} {token.AccessToken}"); 

HttpRequestMessage request = new HttpRequestMessage(
    HttpMethod.Get, 
    $"users/{Uri.EscapeUriString(username)}" 
); 

HttpResponseMessage response = await graphClient.SendAsync(request); 
if (response.IsSuccessStatusCode) 
{ 
    return await response.Content.ReadAsAsync<UserResult>(); 
} 
// I am here with a 404 

bin ich etwas fehlt oder etwas falsch zu machen?

+0

Ich weiß, dass ich den Benutzer per E-Mail abrufen kann, und es ist die Abhilfe, die ich zur Zeit für Gastbenutzer in Kraft gesetzt, aber ich fürchte, die E-Mail aus dem UPN bekommen (die einzige Information, die ich habe) ist keine robuste Situation in der Zukunft. –

Antwort

0

Sie müssen die URL codieren userPrincipalName. Andernfalls übergeben Sie effektiv name_originaldomain, da die alles darüber hinaus als URI Fragment bezeichnet.

Versuchen Sie es mit name_originaldomain%23EXT%23%40mydomain.onmicrosoft.com

+0

Ich vermute, 'Uri.EscapeUriString' würde zum Trick, aber es ergab sich, ich sollte' System.Net.WebUtility.UrlEncode' stattdessen verwenden. Danke Marc. –

1

Eine Alternative ist es, eine größere Abfrage zu erstellen, die auch Abfragen auf dem mail Eigenschaft mit der E-Mail-Adresse des Gastbenutzer (oder in Ihrem Fall, was Sie haben als „name @ originaldomain“). Für Gastbenutzer legen wir die Eigenschaft mail auf die E-Mail-Adresse des Gastes fest.

../users?$filter=mail eq '[email protected]'

hoffte, das hilft,

Verwandte Themen