ISC - Account Aggregation Fails Despite Successful OAuth2 JWT Setup in SharePoint Online SaaS Connector

Hi everyone,

I’m currently integrating the SaaS SharePoint Online connector in SailPoint IdentityNow and have carefully followed all the official prerequisites as outlined here:
Prerequisites – SailPoint SharePoint Online Connector

For authentication, I’ve configured OAuth2.0 JWT Certificate credentials as described in the documentation:
Creating OAuth – JWT Certificate Flow

The Test Connection completes successfully, which confirms that the app registration, certificate, and permissions are correctly set up.

However, when I attempt to run Account Aggregation, I receive the following error:

[ConnectorHost] [exception] type:java.lang.RuntimeException, localizableMessage:agg failed (requestId: b15aba3e544e2b3b2d1dceab835)

I’ve verified:

  • The app has Sites.FullControl.All permissions granted via Microsoft Entra ID
  • The app is trusted in SharePoint via appinv.aspx

Has anyone encountered this issue before or have any suggestions on how to troubleshoot this aggregation failure?

Thanks in advance for your help!

Kind regards,
Paolo

I would suggest tailing the saas connector logs using the SailPoint CLI and the command

sail conn logs tail

That should give you some additional context to where the aggregation is failing

Here the outcome from the sail cli

[2025-06-21T07:30:28.972+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.955Z","logger":"sailpoint.connector.sharepointonline.SPOConnectionManager","message":" ExceptionBucketing : Exception received : sailpoint.connector.InsufficientPermissionException: {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.977+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.958Z","error.message":"{\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","error.stack_trace":"sailpoint.connector.InsufficientPermissionException: {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}\n\tat sailpoint.connector.sharepointonline.SPOConnectionManager.processRequest(SPOConnectionManager.java:110)\n\tat sailpoint.connector.sharepointonline.SPOConnectionManager.processGETRequest(SPOConnectionManager.java:212)\n\tat sailpoint.connector.O365SharepointOnlineConnector.processReadRequest(O365SharepointOnlineConnector.java:732)\n\tat sailpoint.connector.O365SharepointOnlineConnector.access$500(O365SharepointOnlineConnector.java:67)\n\tat sailpoint.connector.O365SharepointOnlineConnector$AllSiteCollector.call(O365SharepointOnlineConnector.java:2616)\n\tat sailpoint.connector.O365SharepointOnlineConnector$AllSiteCollector.call(O365SharepointOnlineConnector.java:2592)\n\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n","error.type":"sailpoint.connector.InsufficientPermissionException","logger":"sailpoint.connector.O365SharepointOnlineConnector","message":"Exception occurred in processReadRequest.  {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.980+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.961Z","logger":"sailpoint.connector.sharepointonline.SPOConnectionManager","message":" ExceptionBucketing : Exception received : sailpoint.connector.InsufficientPermissionException: {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.980+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.962Z","error.message":"{\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","error.stack_trace":"sailpoint.connector.InsufficientPermissionException: {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}\n\tat sailpoint.connector.sharepointonline.SPOConnectionManager.processRequest(SPOConnectionManager.java:110)\n\tat sailpoint.connector.sharepointonline.SPOConnectionManager.processGETRequest(SPOConnectionManager.java:212)\n\tat sailpoint.connector.O365SharepointOnlineConnector.processReadRequest(O365SharepointOnlineConnector.java:732)\n\tat sailpoint.connector.O365SharepointOnlineConnector.access$500(O365SharepointOnlineConnector.java:67)\n\tat sailpoint.connector.O365SharepointOnlineConnector$AllSiteCollector.call(O365SharepointOnlineConnector.java:2616)\n\tat sailpoint.connector.O365SharepointOnlineConnector$AllSiteCollector.call(O365SharepointOnlineConnector.java:2592)\n\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n","error.type":"sailpoint.connector.InsufficientPermissionException","logger":"sailpoint.connector.O365SharepointOnlineConnector","message":"Exception occurred in processReadRequest.  {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.983+02:00] INFO  | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.964Z","logger":"connector.common.http.client.impl.ApacheHttpClientWrapper","message":"Response received for URL https://example.sharepoint.com/_api/search/query?querytext='contentclass:STS_site'\u0026startrow=900\u0026rowlimit=450\u0026timeout=30000\u0026trimduplicates=false in 414 millis status code 401, Response size 74 bytes.","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.983+02:00] INFO  | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.964Z","logger":"sailpoint.connector.sharepointonline.SPOConnectionManager","message":" Process Request failed for Site URL : https://example.sharepoint.com/_api/search/query?querytext='contentclass:STS_site'\u0026startrow=900\u0026rowlimit=450\u0026timeout=30000\u0026trimduplicates=false","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.983+02:00] WARN  | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.965Z","logger":"sailpoint.connector.sharepointonline.SPOConnectionManager","message":"Resource : https://example.sharepoint.com/_api/search/query?querytext='contentclass:STS_site'\u0026startrow=900\u0026rowlimit=450\u0026timeout=30000\u0026trimduplicates=false cannot be accessed {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.983+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.965Z","logger":"sailpoint.connector.sharepointonline.SPOConnectionManager","message":" ExceptionBucketing : Exception received : sailpoint.connector.InsufficientPermissionException: {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.984+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.965Z","error.message":"{\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","error.stack_trace":"sailpoint.connector.InsufficientPermissionException: {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}\n\tat sailpoint.connector.sharepointonline.SPOConnectionManager.processRequest(SPOConnectionManager.java:110)\n\tat sailpoint.connector.sharepointonline.SPOConnectionManager.processGETRequest(SPOConnectionManager.java:212)\n\tat sailpoint.connector.O365SharepointOnlineConnector.processReadRequest(O365SharepointOnlineConnector.java:732)\n\tat sailpoint.connector.O365SharepointOnlineConnector.access$500(O365SharepointOnlineConnector.java:67)\n\tat sailpoint.connector.O365SharepointOnlineConnector$AllSiteCollector.call(O365SharepointOnlineConnector.java:2616)\n\tat sailpoint.connector.O365SharepointOnlineConnector$AllSiteCollector.call(O365SharepointOnlineConnector.java:2592)\n\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n","error.type":"sailpoint.connector.InsufficientPermissionException","logger":"sailpoint.connector.O365SharepointOnlineConnector","message":"Exception occurred in processReadRequest.  {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.986+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.968Z","logger":"sailpoint.connector.O365SharepointOnlineConnector","message":"Exception While fetching All Sites :  Exception occurred in processReadRequest.  Error - {"error_description":"ID3035: The request was not valid or is malformed."}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.987+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.969Z","logger":"sailpoint.connector.O365SharepointOnlineConnector","message":"Exception While fetching All Sites :  Exception occurred in processReadRequest.  Error - {"error_description":"ID3035: The request was not valid or is malformed."}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.988+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.970Z","logger":"sailpoint.connector.O365SharepointOnlineConnector","message":"Exception While fetching All Sites :  Exception occurred in processReadRequest.  Error - {"error_description":"ID3035: The request was not valid or is malformed."}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.997+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.974Z","Operation":"Iterate","logger":"sailpoint.connector.O365SharepointOnlineConnector","message":"Exception while Running Threads sailpoint.connector.ConnectorException: Exception occurred in processReadRequest.  Error - {"error_description":"ID3035: The request was not valid or is malformed."}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.997+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.974Z","Operation":"Iterate","logger":"sailpoint.connector.sharepointonline.SPOConnectionManager","message":" ExceptionBucketing : Exception received : java.util.concurrent.ExecutionException: sailpoint.connector.ConnectorException: Exception occurred in processReadRequest.  Error - {"error_description":"ID3035: The request was not valid or is malformed."}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.997+02:00] INFO  | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.977Z","logger":"connector.common.http.client.impl.ApacheHttpClientWrapper","message":"Response received for URL https://example.sharepoint.com/_api/search/query?querytext='contentclass:STS_site'\u0026startrow=1350\u0026rowlimit=450\u0026timeout=30000\u0026trimduplicates=false in 432 millis, status code 401, Response size 74 bytes.","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.997+02:00] INFO  | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.978Z","logger":"connector.common.http.client.impl.ApacheHttpClientWrapper","message":"Response received for URL https://example.sharepoint.com/_api/search/query?querytext='contentclass:STS_site'\u0026startrow=450\u0026rowlimit=450\u0026timeout=30000\u0026trimduplicates=false in 423 millis, status code 401, Response size 74 bytes.","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.997+02:00] INFO  | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.978Z","logger":"sailpoint.connector.sharepointonline.SPOConnectionManager","message":" Process Request failed for Site URL : https://example.sharepoint.com/_api/search/query?querytext='contentclass:STS_site'\u0026startrow=450\u0026rowlimit=450\u0026timeout=30000\u0026trimduplicates=false","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.997+02:00] WARN  | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.978Z","logger":"sailpoint.connector.sharepointonline.SPOConnectionManager","message":"Resource : https://example.sharepoint.com/_api/search/query?querytext='contentclass:STS_site'\u0026startrow=450\u0026rowlimit=450\u0026timeout=30000\u0026trimduplicates=false cannot be accessed {"error_description":"ID3035: The request was not valid or is malformed."}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.997+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.979Z","logger":"sailpoint.connector.sharepointonline.SPOConnectionManager","message":" ExceptionBucketing : Exception received : sailpoint.connector.InsufficientPermissionException: {"error_description":"ID3035: The request was not valid or is malformed."}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:28.997+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.979Z","error.message":"{"error_description":"ID3035: The request was not valid or is malformed."}","error.stack_trace":"sailpoint.connector.InsufficientPermissionException: {"error_description":"ID3035: The request was not valid or is malformed."}\n\tat sailpoint.connector.sharepointonline.SPOConnectionManager.processRequest(SPOConnectionManager.java:110)\n\tat sailpoint.connector.sharepointonline.SPOConnectionManager.processGETRequest(SPOConnectionManager.java:212)\n\tat sailpoint.connector.O365SharepointOnlineConnector.processReadRequest(O365SharepointOnlineConnector.java:732)\n\tat sailpoint.connector.O365SharepointOnlineConnector.access$500(O365SharepointOnlineConnector.java:67)\n\tat sailpoint.connector.O365SharepointOnlineConnector$AllSiteCollector.call(O365SharepointOnlineConnector.java:2616)\n\tat sailpoint.connector.O365SharepointOnlineConnector$AllSiteCollector.call(O365SharepointOnlineConnector.java:2592)\n\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n","error.type":"sailpoint.connector.InsufficientPermissionException","logger":"sailpoint.connector.O365SharepointOnlineConnector","message":"Exception occurred in processReadRequest.  {"error_description":"ID3035: The request was not valid or is malformed."}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:29.000+02:00] INFO  | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.981Z","logger":"sailpoint.connector.sharepointonline.SPOConnectionManager","message":" Process Request failed for Site URL : https://example.sharepoint.com/_api/search/query?querytext='contentclass:STS_site'\u0026startrow=1350\u0026rowlimit=450\u0026timeout=30000\u0026trimduplicates=false","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:29.000+02:00] WARN  | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.982Z","logger":"sailpoint.connector.sharepointonline.SPOConnectionManager","message":"Resource : https://example.sharepoint.com/_api/search/query?querytext='contentclass:STS_site'\u0026startrow=1350\u0026rowlimit=450\u0026timeout=30000\u0026trimduplicates=false cannot be accessed {"error_description":"ID3035: The request was not valid or is malformed."}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:29.000+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.982Z","logger":"sailpoint.connector.sharepointonline.SPOConnectionManager","message":" ExceptionBucketing : Exception received : sailpoint.connector.InsufficientPermissionException: {"error_description":"ID3035: The request was not valid or is malformed."}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:29.000+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.982Z","error.message":"{\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","error.stack_trace":"sailpoint.connector.InsufficientPermissionException: {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}\n\tat sailpoint.connector.sharepointonline.SPOConnectionManager.processRequest(SPOConnectionManager.java:110)\n\tat sailpoint.connector.sharepointonline.SPOConnectionManager.processGETRequest(SPOConnectionManager.java:212)\n\tat sailpoint.connector.O365SharepointOnlineConnector.processReadRequest(O365SharepointOnlineConnector.java:732)\n\tat sailpoint.connector.O365SharepointOnlineConnector.access$500(O365SharepointOnlineConnector.java:67)\n\tat sailpoint.connector.O365SharepointOnlineConnector$AllSiteCollector.call(O365SharepointOnlineConnector.java:2616)\n\tat sailpoint.connector.O365SharepointOnlineConnector$AllSiteCollector.call(O365SharepointOnlineConnector.java:2592)\n\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\n","error.type":"sailpoint.connector.InsufficientPermissionException","logger":"sailpoint.connector.O365SharepointOnlineConnector","message":"Exception occurred in processReadRequest.  {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:29.002+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.983Z","logger":"sailpoint.connector.O365SharepointOnlineConnector","message":"Exception While fetching All Sites :  Exception occurred in processReadRequest.  Error - {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:29.002+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.984Z","Operation":"Iterate","logger":"sailpoint.connector.O365SharepointOnlineConnector","message":"Connector Exception while iterate objects :java.util.concurrent.ExecutionException: sailpoint.connector.ConnectorException: Exception occurred in processReadRequest.  Error - {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:29.004+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.987Z","logger":"sailpoint.connector.O365SharepointOnlineConnector","message":"Exception While fetching All Sites :  Exception occurred in processReadRequest.  Error - {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:29.006+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.984Z","Operation":"Iterate","error.message":"sailpoint.connector.ConnectorException: java.util.concurrent.ExecutionException: sailpoint.connector.ConnectorException: Exception occurred in processReadRequest.  Error - {\"error_description\":\"ID3035: The request was not valid or is malformed.\"}","error.stack_trace":"...","error.type":"sailpoint.connector.ConnectorException","logger":"com.sailpoint.valess.handler.SailpointConnectorCommandHandler","message":"Account list exception","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:29.006+02:00] ERROR | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.988Z","Operation":"Iterate","error.message":"agg failed","error.stack_trace":"...","error.type":"java.lang.RuntimeException","logger":"com.sailpoint.valess.handler.CommandHandler","message":"failed to handle command","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:29.007+02:00] WARN  | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.989Z","Operation":"Iterate","logger":"com.sailpoint.valess.handler.CommandHandler","message":"spConnDebugLoggingEnabled: false","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:29.008+02:00] INFO  | connectorMessage Ôû´©Ä {"@timestamp":"2025-06-21T05:30:28.990Z","Operation":"Iterate","logger":"com.sailpoint.valess.Shim","message":"Active commands: 0","thread_name":"[REDACTED_THREAD]"}
[2025-06-21T07:30:29.024+02:00] INFO  | commandOutcome   Ôû´©Ä Command failed with [ConnectorError] {ExceptionType=java.lang.RuntimeException, LocalizedMessage=agg failed}: std:account:list, for connector version 5. output_count=0 output_bytes=0 keep_alive_count=1 state_count=0. Elapsed time 5137ms


Thanks in advance for your support.

Kind regards,
Paolo

Hey Paolo,

As I can see in your log from sail cli, your SharePoint Service Account seems to not have enough permissions to target all Sites collections .(sailpoint.connector.InsufficientPermissionException).

I had a similar error when I integrated the SharePoint connector.

It turned out that the SharePoint service account was not in the correct AD group for reading collections in SharePoint.

I hope my message will help you :slight_smile:

1 Like

From the logs it looks like there is Missing or Incorrect API Permissions which are supposed to be there.

All must be admin permisions and not delegated.

2 Likes

This topic was automatically closed 60 days after the last reply. New replies are no longer allowed.