2015-01-28 5 views
1

사용자의 그룹 구성원에 대해 Azure AD 그래프 API를 쿼리하고 있습니다. 쿼리를 잘 만들 수 있지만 결과는 사용자가 직접 속한 그룹 일뿐입니다. 중첩 그룹은 나열되지 않습니다.Azure AD Graph API 사용자 구성원 중첩 된 그룹

사용자가 특정 그룹에 속하는지 알아 내려고하지만, 100 개가 넘는 API 호출을 알아낼 필요가 없도록 만들려고하지 않습니다. (즉, 사용자가 GroupD의 구성원 인 GroupC의 구성원 인 GroupB의 구성원 인 GroupA에 속해 있습니다 .B, C 및 D 그룹은 기술적으로 속해 있더라도 사용자의 그룹 목록에 나타나지 않습니다 - 그룹 A 만).

하나의 API 호출에서 다른 그룹 구성원을 얻는 방법이 있습니까? Windows 통합 인증을 사용할 때 IsInRole (GroupD)이 true를 반환했을 것입니다. 하지만 Azure AD 인증에서는이 기능을 사용할 수 없으며 IsInRole을 다시 구현하기위한 코드를 가지고있는 게시에서는 단순히 내포 된 그룹을 수행하지 않는 user.memberOf와 동일한 호출을 수행합니다.

참고로이 번호는 전화를 걸 때 사용하는 코드입니다.

var client = AuthenticationHelper.GetActiveDirectoryClient(); 
var user = await client.Users.GetByObjectId(objectId).ExecuteAsync(); 
var userFetcher = (IUserFetcher)user; 
var pagedCollection = await userFetcher.MemberOf.ExecuteAsync(); 

do 
{ 
    var directoryObjects = pagedCollection.CurrentPage.ToList(); 

    foreach (var group in directoryObjects.OfType<Group>().Select(directoryObject => directoryObject)) 
    { 
     groupMembership.Add(group); 
    } 

    pagedCollection = await pagedCollection.GetNextPageAsync(); 
} 
while (pagedCollection != null && pagedCollection.MorePagesAvailable); 

답변

4

예. getMemberObjects API는 사용자가 구성원 인 모든 그룹 (전 이적)을 리턴합니다 (https://msdn.microsoft.com/en-us/library/azure/dn835117.aspx). 또한 checkMemberGroups API를 사용하면 사용자가 그룹의 구성원인지 여부 (순응 적으로)를 확인할 수 있습니다. https://msdn.microsoft.com/en-us/library/azure/dn835107.aspx

그러나 사용자 요구 사항에 따라 Azure AD의 응용 프로그램 역할 기능이 더 적합 할 수 있습니다. 응용 프로그램은 응용 프로그램 역할을 선언 할 수 있습니다.이 응용 프로그램 역할은 관리자뿐 아니라 그룹에 사용자가 지정할 수 있습니다. 사용자가 응용 프로그램에 로그인하면 Azure AD는 할당 된 응용 프로그램 역할을 계산하여 역할 클레임에 보냅니다. 런타임에 그래프를 쿼리 할 필요가 없습니다. 여기를 참조하십시오 : http://www.dushyantgill.com/blog/2014/12/10/roles-based-access-control-in-cloud-applications-using-azure-ad/

+0

나를위한 첫 번째 제안이 효과가있었습니다. 고맙습니다. 온 - 프레미 (on-prem) AD가 우리의 하늘색 AD에 동기화되고 우리는 우리의 ADFS를 통해 다시 OpenID를 사용하여 하늘색 AD에 대해 인증하므로 우리는 하늘색 응용 프로그램에서 직접 역할을 할당하지 않습니다. 당사의 모든 그룹/역할은 온 - 사이트 광고에서 관리됩니다. –

+0

"응용 프로그램에서 응용 프로그램 역할을 선언 할 수 있습니다. 관리자가 사용자 및 그룹에 지정할 수 있습니다." 이것은 금입니다! 왜 앱 개발자가 누군가 AD 버킷에 간섭하고, 그룹을 확인하고, 과도성에 대해 걱정해야합니까 ... 이것이 멀티 테넌트에서 작동할까요?, 그게 질문입니다. – LastTribunal

관련 문제