0

우리 회사의 모든 직원의 전자 메일 주소 목록을 작성하려고합니다. Azure AD 인증을 사용하여 Azure에서 실행되는 웹 응용 프로그램에 있습니다. 이 응용 프로그램은 .NET Framework 4.6을 사용하고 Azure AD에 연결하기 위해 Microsoft.Owin.Security 패키지를 사용합니다.제한된 권한으로 Azure AD에서 기본 UserInfo 만 쿼리

나는 인증 할 수 있으며, 앱 등록에 정의 된 역할을 수행 할 권한이 있습니다. 여태까지는 그런대로 잘됐다. 내 사용자 프로필을 확인할 수 있습니다. 이 경우 Microsoft.Azure.ActiveDirectory.GraphClient 패키지를 사용하여 수동으로 HTTPRequest를 만드는 대신 쿼리를 작성합니다.

string userObjectID = ClaimsPrincipal.Current 
    .FindFirst("http://schemas.microsoft.com/identity/claims/objectidentifier").Value; 

ActiveDirectoryClient activeDirectoryClient = new ActiveDirectoryClient(serviceRoot, 
    async() => await authorizationHelper.GetTokenForApplication()); 

var result = await activeDirectoryClient.Users 
    .Where(u => u.ObjectId.Equals(userObjectID)) 
    .ExecuteAsync(); 

IUser user = result.CurrentPage.ToList().First(); 

AD는 내 쿼리를 계산하고 나를 반환하며 내 정보를 볼 수 있다고 추론합니다. 실행은 성공하고, 저를 돌려줍니다.

result = await activeDirectoryClient.Users 
    .ExecuteAsync(); 
return result.CurrentPage 
    .ToList(); 

이을 : 다른 페이지에서

는, 나는 다음과 같은 시도 (존재하지 않는지 등을 확인하기 위해, 선행 입력하는 사용자를 태그) 회사에서 사용하는 메일 주소를 표시하려면 실패, "충분하지 않은 권한". 내가 생각한 전체 사용자를 볼 수는 없습니다. 내 위임 된 권한, meaning "모든 사용자의 기본 프로필을 읽기"할 수 있습니다

이 앱에서 로그인 한 사용자를 대신하여 조직의 모든 사용자의 기본 프로필을 읽을 수 있도록 허용합니다. 다음 속성 은 사용자의 기본 프로필 인 표시 이름, 성과 이름, 사진 및 전자 메일 주소로 구성됩니다.

그래서, 난 필터링을 시도 :

result = await activeDirectoryClient.Users 
    .Where(u => u.Mail.StartsWith(str)) 
    .ExecuteAsync(); 
return result.CurrentPage 
    .ToList(); 

하지만 여전히 나에게 전체 사용자를 제공하고, 나는 다시 한번 "있는 권한"을 명중하고있다. 그래서

GenericArguments[1], System.String, Microsoft.Azure.ActiveDirectory.GraphClient.Extensions 
.ReadOnlyQueryableSet.`2[TSource,TISource] conflicts with type TISource. 

(네덜란드어에서 무료 번역) 애매한 런타임 오류를 제공

result = await activeDirectoryClient.Users 
    .Where(u => u.Mail.StartsWith(str)) 
    .Select (u => u.Mail) 
    .ExecuteAsync(); 
return result.CurrentPage 
    .ToList(); 

을 시도하고 나는 손실입니다. ActiveDirectoryClient 및 일반 그래프 API에 사용할 수있는 소스 코드가 없습니다 doesn't even mention selecting only basic info.

"쉬운"솔루션은 "더 많은 응용 프로그램 권한을 얻는 것"이지만 관료주의를 거치는 데는 많은 시간이 필요합니다. 그리고 나는 모든 사용자의 메일을받을 수 있어야합니까?

+1

'GetTokenForApplication' 함수를 보여 주시겠습니까? [온라인 도구] (https://jwt.io/)를 사용하여 액세스 토큰을 해독하고'scp'claim에서 권한을 확인하십시오. –

+0

매우 유용합니다. 이제 로컬 작업 버전과 webapp 버전에서 얻은 토큰을 비교할 수 있습니다. 나는 사용 권한이 누락되었지만 상자는 검사되었지만 사용 권한은 결코 부여되지 않았습니다 *. 한숨. – Wolfzoon

답변

0

우선 "제한된 권한으로 Azure AD에서 기본 UserInfo 만 쿼리"에 특별한 작업을 수행 할 필요가 없습니다. 사용자에게 쿼리 만하면 액세스 할 수없는 필드는 모두 null으로 초기화됩니다. Insufficient privileges은 사용자를 전혀 볼 수 없다는 의미입니다. 빨간 깃발.

처음에 나는 tokencache에 결함이 있다고 생각했습니다. 그것은 어느 것이었다. 그럼 내가 고쳤어. 여전히 오류.

Nan Yu가 연결된 online tool으로 여러 응용 프로그램에서 여러 토큰을 보면 내 토큰에서 사용자의 기본 프로필을 볼 수있는 실제 권한이 누락되었음을 알게되었습니다. 여전히 토큰에서 사용 권한을 얻지 못했고 "위임 된 사용 권한"아래의 확인란이 선택되어 있어도 "사용 권한 부여"옵션이 성공적으로 사용되지 않았 음을 알았습니다.

PSA : 실제로 모든 체크 박스가 부여 된 것으로 가정하지 마십시오. 앱 서비스에 어떤 권한이 있는지 확인하십시오. 네가 네 회사에서 허락한다면 그건 그렇다.