2017-10-26 1 views
2

나는 REST API를 SDK없이 직접 사용하여 내 응용 프로그램에서 Azure Active Directory에 액세스하기 위해 Microsoft Graph에서 놀고 있습니다.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'를 사용해야했습니다. 고마워. 마크. –

1

대안은 (또는 경우에 당신이 "이름 @의 originaldomain"로이 무엇을)도 게스트 사용자의 이메일 주소로 mail 재산 조회 더 큰 쿼리를 작성하는 것입니다 사용해보십시오. 게스트 사용자의 경우 mail 속성을 게스트의 전자 메일 주소로 설정합니다. 이 도움이

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

희망,

관련 문제