우리 회사의 모든 직원의 전자 메일 주소 목록을 작성하려고합니다. 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.
"쉬운"솔루션은 "더 많은 응용 프로그램 권한을 얻는 것"이지만 관료주의를 거치는 데는 많은 시간이 필요합니다. 그리고 나는 모든 사용자의 메일을받을 수 있어야합니까?
'GetTokenForApplication' 함수를 보여 주시겠습니까? [온라인 도구] (https://jwt.io/)를 사용하여 액세스 토큰을 해독하고'scp'claim에서 권한을 확인하십시오. –
매우 유용합니다. 이제 로컬 작업 버전과 webapp 버전에서 얻은 토큰을 비교할 수 있습니다. 나는 사용 권한이 누락되었지만 상자는 검사되었지만 사용 권한은 결코 부여되지 않았습니다 *. 한숨. – Wolfzoon