Skip to Content.
Sympa Menu

grouper-users - RE: [grouper-users] New Office 365 Consumer Log and Unified Groups

Subject: Grouper Users - Open Discussion List

List archive

RE: [grouper-users] New Office 365 Consumer Log and Unified Groups

Chronological Thread 
  • From: "Black, Carey M." <>
  • To: Beth Halsema <>
  • Cc: Grouper Users <>
  • Subject: RE: [grouper-users] New Office 365 Consumer Log and Unified Groups
  • Date: Fri, 24 Jul 2020 21:06:36 +0000
  • Arc-authentication-results: i=1; 1; spf=pass; dmarc=pass action=none; dkim=pass; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed;; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=dctt+G92bsjJ1vVrOX/Zhcv6W26hIM2AyJHJfQJtrKM=; b=KPpwrZnQ8BqvT9ivJoxqvZ5DFjhHcbhsfYzwujz7O704irP5E/4I/Wye3HxyyTzCCr2fzkokTv//LmtggGLGgmo1uQLFt0olxCG5qMR5pCg+mVYdbwTAk5F9p2BdVUBnbhXQizju5+k6wF0Qw3xsfzcsOifFse2OST4nPhvE9b9qKJqBsdggjQ8DhHNaEk9hEStIXMfguo+qMAvT4vJ7NqGoMtlfpz2LQRikd2QtK9U0a12kAKKDku+0MNiA3ARHd2Qf7iDlb+CS5TpI2kp57UYEr6Nt6J9rCNqq4TdcfI4iJaWLmeF3lD6idEUxSPa8D1JVQkIfOjgLHJg0/O6DAA==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector9901;; cv=none; b=Fe+uWv4b0kzMbxoQ3kZMG3YqQIOsp5nevhfHBs0z9AN/08jmnPQ6dnVEt2AwAnbubEu0J6FirdOQbulCFhkb6r/Y8d3+mf8SruqVuBqDvxCO4a+4gPBFJf7YzmHyW0Y8BjNNQt9QxS30/aixToC5SjlKh/woG+7gqA679SARaTCRF1cA2/nYRIVIrXeMXAzJxj2HSW4t3teg1kdhZ2yvTwoBeg4yRYGLU1vbJUDg9D2+Fh14NJz68xGxhcRR7ppkVRwXceDCfH2QLORNJsNp7f0tKmai1KqF6Tk+SSOpiKXXIjoeXwgNu/qOV0SWsxAuJUtqgNMB85G3e+IdDPgk2g==



I did not look down that road… but a quick scan of the CLC….


After a group is added in o365, then an attribute should be set on the group with an identifier from o365.

My guess is that the “boom” happens before that get’s a chance to be attempted.


So… if you look at the group in Grouper ( after the CLC creates the group in O365…) and look at the “More actions” à “Attribute Assignments” and see if the attribute “etc:attribute:office365:o365Id" is on the group. ( I am guessing “no”.)


And … when I look at “addMembership” … It uses the attribute value to add members. So.. No attribute value then no memberships  can be added.




On the other hand…

   If you backfill that attribute assignment and value “by hand” then you might get it to provision memberships. ( for a very limited POC  till the bug get’s fixed.)



Carey Matthew


From: Beth Halsema <>
Sent: Friday, July 24, 2020 4:52 PM
To: Black, Carey M. <>
Cc: Grouper Users <>
Subject: Re: [grouper-users] New Office 365 Consumer Log and Unified Groups




Your findings match mine.  Since the groups are being created in Office 365, I think that the initial operation, the addGroup(),  succeeds.  The error is being generated as the result of the response from Microsoft Graph API.


Would that failure then result in the subsequent operations  for those groups (group members additions/deletions and the group removal) not even be attempted for those groups? 


I am starting to wander through the code to get a better feel for the design and expected behaviors.


Thanks again and have a great weekend!



Beth A. Halsema - M.S. in Computer Science, GSEC
Sr. Software Engineer, Identity & Access Management
OVPIT - IT Security and Policy



On Fri, Jul 24, 2020 at 4:30 PM Black, Carey M. <> wrote:



Not much of an answer.. but I find it unfortunately "normal" to see stuff like this in "API"s....  ( Sloppy docs, and/or sloppy API's...)

                There are 3 separate forms of "HiddenMembership" in those M$ docs.


                "HiddenMembership" :

                "Hiddenmembership" :

                "hiddenMembership" :



The error you are reporting looks like a JSON parser error to my eye.

                But I don't know (100% certain) if that is before the client sent a string, or after the client got a message back from M$.


Based on a quick read of the Grouper code it looks like it only is using the "Hiddenmembership" form ( in edu.internet2.middleware.grouper.changeLog.consumer.o365.model.Group ).


So that string likely is coming back from o365 and not matching the "Hiddenmembership".

But my read of the official o365 docs seems to suggest that "Hiddenmembership" is the correct string. So maybe they are sending back an invalid value?



And to be fair and complete...


                                has: "public private, and hiddenmembership", "[Public* | Private | Hiddenmembership]" and "Private, Public, HiddenMembership,".



So yea... The defintion is "clear as mud" for the correct value for that string. 😊



Carey Matthew


-----Original Message-----
From: <> On Behalf Of Beth Halsema
Sent: Friday, July 24, 2020 3:47 PM
Subject: [grouper-users] New Office 365 Consumer Log and Unified Groups



Our team is attempting to use the new Office 365 consumer log to maintain

course groups in Office 365.


We had successfully done so using the security groups; however, we wanted

to use the "Hiddenmembership" Unified groups in order to comply with

FERPA regulations and support the collaboration team's need to create

Microsoft Teams from these groups.


We modified the values in the file:


changeLog.consumer.o365.class = edu.internet2.middleware.grouper.changeLog.consumer.Office365ChangeLogConsumer

# fire every 5 seconds

changeLog.consumer.o365.quartzCron = 0,5,10,15,20,25,30,35,40,45,50,55 * * * * ?

changeLog.consumer.o365.syncAttributeName = etc:attribute:office365:o365Sync

changeLog.consumer.o365.retryOnError = true

changeLog.consumer.o365.tenantId = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

changeLog.consumer.o365.clientId = xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

changeLog.consumer.o365.clientSecret = :)

changeLog.consumer.o365.domain =

changeLog.consumer.o365.idAttribute = uid

#changeLog.consumer.o365.upnAttribute =

changeLog.consumer.o365.groupJexl ="^app:office365:groups:courses:service:policy:","GROUPER-courses-")

#changeLog.consumer.o365.mailNicknameJexl =

#changeLog.consumer.o365.descriptionJexl =

#changeLog.consumer.o365.subjectJexl =

#changeLog.consumer.o365.groupType = [Security* | Unified]

changeLog.consumer.o365.groupType = Unified

#changeLog.consumer.o365.visibility = [Public* | Private | Hiddenmembership]  * Only works with Unified groups

changeLog.consumer.o365.visibility = Hiddenmembership

#changeLog.consumer.o365.proxyType = [http | socks]

#changeLog.consumer.o365.proxyHost =

#changeLog.consumer.o365.proxyPort =


I modified the file




in our Docker containers in order to increase the logging.


       = DEBUG


The outcome was:


1. The groups are created in Office 365.  According to the Office 365

   admin portal, we created Microsoft 365 HiddenMembership groups.


   No owners and no members.


   In the logs/grouper_daemon.log file, the following error is logged:


Did not get all the way through the batch! 1848027 != 1848101java.lang.RuntimeException: Error in loader job: null, check logs: Error: o365 threw an exception processing change log entry sequence number 1848027., sequenceNumber: 1848027, com.squareup.moshi.JsonDataException: Expected one of [Public, Private, Hiddenmembership] but was HiddenMembership at path $.visibility

                at com.squareup.moshi.StandardJsonAdapters$EnumJsonAdapter.fromJson(

                at com.squareup.moshi.StandardJsonAdapters$EnumJsonAdapter.fromJson(

                at com.squareup.moshi.JsonAdapter$2.fromJson(

                at com.squareup.moshi.ClassJsonAdapter$

                at com.squareup.moshi.ClassJsonAdapter.fromJson(

                at com.squareup.moshi.JsonAdapter$2.fromJson(

                at retrofit2.converter.moshi.MoshiResponseBodyConverter.convert(

                at retrofit2.converter.moshi.MoshiResponseBodyConverter.convert(

                at retrofit2.OkHttpCall.parseResponse(

                at retrofit2.OkHttpCall.execute(

                at edu.internet2.middleware.grouper.changeLog.consumer.o365.GraphApiClient.invoke(

                at edu.internet2.middleware.grouper.changeLog.consumer.o365.GraphApiClient.addGroup(

                at edu.internet2.middleware.grouper.changeLog.consumer.Office365ChangeLogConsumer.addGroup(Office, threadId: 104, elapsed: 1285 ms



2. No members were ever added to the groups via changeLog.consumer.o365.

3. We were unable to delete the groups from Office 365 through their deletion

   in Grouper.


The groups are created but no subsequent operations on them seem to be



Is there something that we have overlooked?  Or is the development of support

for unified groups still a work-in-progress?


Thank you!




Beth A. Halsema - M.S. in Computer Science, GSEC

Sr. Sofware Engineer, Identity & Access Management

OVPIT - IT Security and Policy;!!KGKeukY!kIgRCaDOkKFEUnBHzPZEJu8pk_3ipJwriqvV0H15-kRKFWkrNDld2bNcdf2dMLDVM3E$

Archive powered by MHonArc 2.6.19.

Top of Page