async Task <ActiveDirectoryClient> GetActiveDirectoryClient()
 {
     if (_activeDirectoryClient == null)
     {
         _activeDirectoryClient = await ServiceHelpers.GetActiveDirectoryClient();
     }
     return(_activeDirectoryClient);
 }
        public static async Task ListPackageRegistrations(IOwinContext context)
        {
            //
            // The Scope claim tells you what permissions the client application has in the service.
            // In this case we look for a scope value of user_impersonation, or full access to the service as the user.
            //
            if (ClaimsPrincipal.Current.FindFirst("http://schemas.microsoft.com/identity/claims/scope").Value != "user_impersonation")
            {
                await context.Response.WriteAsync("The Scope claim does not contain 'user_impersonation' or scope claim not found");

                context.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
            }

            ActiveDirectoryClient activeDirectoryClient = await ServiceHelpers.GetActiveDirectoryClient();

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

            IUser user = await activeDirectoryClient.Users.GetByObjectId(userObjectID).ExecuteAsync();

            IPagedCollection <IDirectoryObject> groups = await((IUserFetcher)user).MemberOf.ExecuteAsync();

            JArray array = new JArray();

            while (true)
            {
                foreach (IDirectoryObject group in groups.CurrentPage)
                {
                    array.Add(((Group)group).DisplayName);
                }

                if (!groups.MorePagesAvailable)
                {
                    break;
                }

                groups = await groups.GetNextPageAsync();
            }

            await ServiceHelpers.WriteResponse(context, array, HttpStatusCode.OK);
        }