2017-10-26 21 views
2

私はMicrosoft Graphを使ってプレイしており、REST APIを直接(SDKなしで)使用してアプリケーションからAzure Active Directoryにアクセスしています。userPrincipalNameのゲストユーザをMicrosoft Graphで取得

documentationによると、私はidまたはuserPrincipalName/users/{id | userPrincipalName}を使用してからユーザーを取得することができるはずです。

これは実際には機能していますが、ゲストユーザーでは機能していません。ゲストユーザーのuserPrincipalNamename_originaldomain#EXT#@mydomain.onmicrosoft.comのようなもので、ユーザー結果を取得しようとすると404 Not Foundになります。

これは私が現在使用していますコードです:

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 

が、私は何かが足りないか、何か間違ったことをやっていますか?

+0

は、私は電子メールでユーザーを検索することができます知っている、そしてそれは私が現在、お客様のユーザーのための場所に置く回避策ですが、私は(UPNから電子メールを取得恐れます私が持っている唯一の情報)は、将来の堅牢な状況ではありません。 –

答えて

0

userPrincipalNameをURLエンコードする必要があります。それ以外の場合は#はその時点以降のすべてをURI Fragmentと指定しているので、実際にはname_originaldomainを渡しています。

name_originaldomain%23EXT%23%40mydomain.onmicrosoft.com

+0

私は 'Uri.EscapeUriString'がトリックだと思っていましたが、代わりに' System.Net.WebUtility.UrlEncode'を使うべきでした。ありがとうMarc。 –

1

代替を使用してみてくださいまた、(あなたは、「名前の@ originaldomain」として持っているものや、あなたの場合)ゲストユーザの電子メールアドレスをmailプロパティに照会する大きなクエリを作成することです。ゲストユーザーの場合は、mailプロパティをゲストの電子メールアドレスに設定します。このことができます

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

希望、

関連する問題