Dodeca SharePoint Connector
Overview
The Dodeca SharePoint Connector provides connectivity to SharePoint Online and on-premises SharePoint sites. It is implemented as a native connector module and is imported into a Dodeca tenant like any other connector module.
The module provides three capabilities:
-
SharePointConnection— a reusable connection/authorization definition for a SharePoint site. -
SharePointConnector— a DataSet connector that downloads a single SharePoint document and adapts it into a Dodeca DataSet (e.g., via an Excel or CSV adaptor). -
SharePointOperations— a WorkbookScript method that uploads, downloads, lists, and deletes SharePoint documents, list items, and attachments from a workbook script.
Prerequisites
-
The connector module imported into the Dodeca tenant and the application restarted.
-
For the recommended authentication path (see below): the Microsoft Authorization Connector must be downloaded, imported into the Dodeca tenant, and the application restarted before a SharePoint connection can use it.
Authentication Modes
SharePointConnection supports two authentication approaches. Only the first is supported for new connections.
| Mode | Property | Status |
|---|---|---|
Microsoft Authorization Connector |
|
Recommended |
Direct (legacy) OAuth |
|
Deprecated |
Recommended: OAuthConnectionID
Set OAuthConnectionID to the ID of a Microsoft Authorization Connector connection (an OAuthConnection of kind MicrosoftConnection). The Microsoft Authorization Connector performs the actual Entra ID (Azure AD) sign-in — interactive delegated login, client credentials, or certificate, depending on how that connection is configured — and SharePointConnection requests a token scoped to the SharePoint site from it.
| Property | Value |
|---|---|
|
ID of a Microsoft Authorization Connector connection |
|
The SharePoint site URL, e.g. |
This path authenticates directly against the Microsoft identity platform (Entra ID) and is unaffected by the Azure ACS retirement described below.
Choosing App-Only vs. Delegated (Public Client) Authentication
Whether the Entra app registration behind a SharePoint connection is configured as app-only (confidential client) or delegated (public client) determines whose identity SharePoint sees for every operation this connector performs:
| App-only (confidential client) | Delegated (public client) | |
|---|---|---|
Credential |
|
None — no secret to protect |
Acts as |
The Entra app itself |
The signed-in Dodeca user |
SharePoint sees |
The app’s identity for every operation |
Each user’s own identity |
Best suited to |
A privileged, unattended system (e.g., a scheduled report/close-book generator) that can reasonably protect a secret |
Arbitrary end users publishing to SharePoint through Dodeca, where no shared secret should need to be distributed to client workstations |
If a ClientCertificate (or, formerly, ClientSecret) would otherwise need to be installed on every end-user workstation just so that arbitrary users can publish documents, that’s a sign the connection should be reconfigured as delegated/public client instead: Dodeca then publishes to SharePoint on the signed-in user’s behalf, and no secret needs to be protected on the client at all.
Redirect URI (reply URL) for delegated / public client apps
A public client Entra app registration needs a redirect URI (reply URL) of type "Mobile and desktop applications". Dodeca uses MSAL.NET, which by default targets the standard native-client redirect URI:
https://login.microsoftonline.com/common/oauth2/nativeclient
Register this exact URI on the Entra app registration and no further configuration is required — both the OAuthConnectionID (Microsoft Authorization Connector) path and the legacy direct SharePointConnection delegated path (OAuthInteractive, or neither ClientSecret nor ClientCertificate set) use it automatically via MSAL’s default redirect URI.
Only the OAuthConnectionID path supports overriding this with an arbitrary custom redirect URI, via the RedirectUri property on the Microsoft Authorization Connector connection — set it there and register the matching value on the Entra app registration. The legacy direct SharePointConnection properties have no equivalent override and always use the MSAL default.
Granting Sites.Selected Access to a Specific SharePoint Site
When the Entra app registration behind a SharePoint connection uses the Sites.Selected permission — recommended over tenant-wide Sites.Read.All/Sites.ReadWrite.All — configuration is a two-step process, and both steps are required:
-
Consent to the
Sites.Selectedpermission on the app registration in Entra ID. Note thatSites.Selectedexists on two API resources — Microsoft Graph and SharePoint (Office 365 SharePoint Online). This connector calls SharePoint directly (CSOM/REST with SharePoint-audience tokens), so the SharePointSites.Selectedpermission is the one that gates its calls; consenting the Graph one as well is harmless and covers Graph-based tooling. -
Grant the app access to each specific site, with a role, via the Microsoft Graph site permissions endpoint. An app registration with
Sites.Selectedconsented but no site grants has access to no sites at all — that is the designed behavior of the permission, not a misconfiguration.
The roles that can be granted per site:
| Role | Allows |
|---|---|
|
Reading the metadata and contents of the site’s lists and libraries |
|
Everything |
|
Full control of the site |
An administrator can create and verify grants with PnP PowerShell:
# Inspect the grants that already exist on the connected site
Get-PnPAzureADAppSitePermission
# Grant the app read+write access to a specific site
Grant-PnPAzureADAppSitePermission -AppId <client-id> -DisplayName "<app display name>" `
-Permissions Write -Site https://contoso.sharepoint.com/sites/finance
or by calling the Graph endpoint directly:
POST https://graph.microsoft.com/v1.0/sites/{siteId}/permissions
Content-Type: application/json
{
"roles": ["write"],
"grantedToIdentities": [
{ "application": { "id": "<client-id>", "displayName": "<app display name>" } }
]
}
Creating a site-level grant is itself a privileged operation: the identity making the call needs Sites.FullControl.All (or to be a sufficiently privileged SharePoint/tenant administrator signing in interactively with PnP PowerShell).
Delegated connections intersect with the user’s own permissions. For a delegated (public client) connection, effective access is the intersection of the signed-in user’s SharePoint permissions and the app’s site grant — the app can never exceed the user, and the user can never exceed the app’s grant through Dodeca. In particular, "the user can browse to the library and upload manually" demonstrates the user’s access only; it says nothing about whether the app has a grant.
Symptom of a missing (or read-only) site grant: a site-only connection test can report success while every document library and list operation fails with The specified document library or path could not be found. — regardless of the path used, including paths that resolve fine in a browser. Without a test document library configured, the connection test verifies only that the signed-in identity can open the site, and SharePoint reports folders the app cannot access as non-existent rather than as access denied. Configure the focused read/write test described in Testing a SharePoint Connection below to exercise the same library and upload paths as the real operation. If a path has been verified in a browser and operations still report it as not found, check the site grant before debugging the path.
A read-only grant is not limited to failing the write itself: the document library lookup that precedes the write has been observed to be denied as well, so the operation fails with "could not be found" before it ever attempts to upload — for every path, including one that is provably correct. When a library or list cannot be resolved, the Smart Client log records the path and whether the connection can view items on the site. Add-items permission is checked and reported by the focused connection test only after an actual upload fails; view items = yes, add items = no there is the signature of a read-only grant that needs upgrading to write. Workbook-operation errors stay concise and report only a conclusion the lookup or probes established — see the Logging and Diagnostics section below.
Deprecated: direct OAuth properties
TenantID, ClientID, ClientSecret, ClientCertificate, and ClientCertificatePassword are legacy properties retained as a migration lifeline for connections created before the Microsoft Authorization Connector existed. They are hidden in the property grid unless already populated, and new connections should use OAuthConnectionID instead. Saving a connection metadata change deliberately removes these deprecated values, so migrate the connection to OAuthConnectionID before editing and saving it. When OAuthConnectionID is not set, the connection falls back to one of three direct token-acquisition flows depending on which properties are populated:
| If set | Flow used | Identity platform |
|---|---|---|
|
App-only token via Azure ACS ( |
Azure ACS — being retired, see below |
|
Entra ID app-only token via MSAL confidential client, using |
Entra ID (Azure AD) |
Neither |
Entra ID delegated token via MSAL public client (interactive sign-in, with silent/cached retry), using |
Entra ID (Azure AD) |
⚠ Azure ACS Retirement and This Connector
Microsoft has been retiring Azure Access Control Service (ACS), the legacy accounts.accesscontrol.windows.net app-only authentication mechanism originally used by SharePoint Add-ins and script-based app-only principals. Per Microsoft’s retirement announcement, ACS stopped issuing tokens for new tenants on November 1, 2024, and was fully retired for all remaining tenants on April 2, 2026 — a date that has now passed. SharePoint Online app-only connections that rely on an ACS-issued token stop authenticating once retirement takes effect for a given tenant, regardless of client code; there is no workaround short of switching to a non-ACS credential flow. See Microsoft’s retirement FAQ if you need to confirm rollout status for a specific tenant.
This connector has exactly one code path that depends on Azure ACS: the ClientSecret-based flow (SharePointConnection.ClientSecret set, or the WorkbookScript AuthenticationPolicy=OAuthClientSecret). Internally this calls AcsTokenHelper against https://accounts.accesscontrol.windows.net to obtain an app-only token using a ClientID/ClientSecret pair registered as a SharePoint "Add-in" (S2S) principal. This flow is deprecated in the connector’s metadata and should not be used for new connections against SharePoint Online. Given the April 2, 2026 cutoff has passed, any connection still using this flow should be treated as non-functional (or at imminent risk, depending on tenant-level rollout) rather than merely deprecated.
Every other authentication path in this connector — the recommended OAuthConnectionID path, the ClientCertificate path, the OAuthInteractive/OAuthPassword delegated MSAL paths, and on-premises DefaultNetworkCredentials/SpecifiedCredentials — authenticates directly against Entra ID (Azure AD) or Windows-integrated auth, not Azure ACS, and is unaffected by the retirement.
If you currently have a SharePoint connection using ClientSecret (or AuthenticationPolicy=OAuthClientSecret): follow Microsoft’s ACS-to-Azure-AD upgrade guide alongside these connector-specific steps.
-
Register (or reuse) an Entra ID app registration for the connector — see Granting access via Entra ID App-Only for the certificate-based app-only setup this connector expects.
-
Either:
-
Import the Microsoft Authorization Connector and switch the SharePoint connection to
OAuthConnectionID(recommended — this also gives you delegated or certificate-based app-only auth managed centrally), or -
Add a certificate credential to the app registration and switch to
ClientCertificateon theSharePointConnection(orAuthenticationPolicy=OAuthClientCertificatein the WorkbookScript method) as a drop-in app-only replacement.
-
-
Grant the app registration SharePoint permissions under Entra ID/Microsoft Graph rather than the legacy SharePoint "Add-in" permissions model tied to ACS. Prefer the
Sites.Selectedpermission over tenant-wideSites.Read.All/Sites.ReadWrite.Allwhere possible — it scopes the app registration to specific site collections, granted per-site via the Graph site permissions endpoint, rather than every site in the tenant. See "GrantingSites.SelectedAccess to a Specific SharePoint Site" above for the required per-site grant, without which the app registration has no access at all.
Testing a SharePoint Connection
The connection editor can test only the SharePoint site, or it can focus the test on the document library that real workbook operations will use. The focus properties are optional and appear in the Test category alongside TestTokens:
| Property | Purpose |
|---|---|
|
Resolves a document library or folder by relative path, using the same path composition and |
|
Resolves the root of a document library by its display title when |
|
Optional local file to upload through |
With neither library property configured, the test preserves the original scope: it acquires a token and performs a real read of the SharePoint site. A success reports Connected successfully. That proves sign-in and site-open access only; it does not prove that a document library is reachable or writable.
To test a library root by display title, set TestDocumentLibraryName to a value such as Documents and leave TestDocumentLibraryPath blank. To test a library URL or a specific subfolder, leave TestDocumentLibraryName blank and set TestDocumentLibraryPath to a relative path such as Shared Documents/Parent/Child. A path-like value in TestDocumentLibraryName is rejected with guidance to use TestDocumentLibraryPath.
With a test library configured, the connection test fails unless the same resolver used by workbook operations can open that library or folder and read its item count. A success reports Document library read test passed. followed by the resolved server-relative URL and item count; a test resolved by display title also reports the library description when one is available. A failure begins with a concise user-facing reason and includes SharePoint’s exception message when one is available. Because this test is run by an administrator to validate configuration, it then reports the supplied library name or path, the server-reported site URL, the exact URL requested from SharePoint, and any resolution or permission evidence captured by the probes.
When TestDocumentLocalPath is configured, the test then uploads that file through the real AddDocument operation. This persisted property names a file on the Smart Client performing the test; another administrator or machine must select a locally accessible file before rerunning the write test. The uploaded copy receives a unique name beginning Dodeca-SharePoint-Connection-Test- and is deliberately left in the target folder so an administrator can verify it in SharePoint; remove it manually after verification. If the actual upload fails on SharePoint Online, the result reports both view-items and add-items access; view items = yes, add items = no identifies a read-only grant or a delegated user without contribute rights. A passing write test proves that this connection could upload that artifact at the time of the test. It does not promise that another folder, a later permissions state, or a different signed-in user will behave the same way.
For a delegated connection, effective access remains the intersection of the signed-in user’s SharePoint permissions and the app registration’s grant. Test with the same user who will run the workbook operation; an administrator’s successful test does not prove another user’s access. A successful delegated connection test includes a reminder that the result reflects both the signed-in user’s permissions and the app’s site access. If a focused read or write test fails for every known-good path, review Granting Sites.Selected Access to a Specific SharePoint Site above and the diagnostics below.
SharePointConnector (DataSet Connector)
Downloads a single document from a SharePoint document library and adapts its content stream into a DataSet using a configured IDataSetAdaptor (e.g., an Excel or delimited-text adaptor).
| Property | Value |
|---|---|
|
ID of the |
|
Name of the document library, e.g. |
|
Name of the document to retrieve |
Both DocumentLibraryName and DocumentName are required; the connector validates this before querying.
SharePointOperations (WorkbookScript Method)
Uploads, downloads, lists, and deletes SharePoint documents, list items, and attachments from a workbook script. The method is exposed to workbook scripts as SharePointOperations (headless) and to grid controls bound to a WorkbookView as WorkbookViewSharePointOperations, and is invoked via one of the overloads below.
| Overload | Description |
|---|---|
|
Uploads a local file as a list item attachment; replaces the attachment if it already exists |
|
Uploads a local file to a document library; creates a new version if the document already exists |
|
Adds a list item (by |
|
Downloads a list item attachment to a local file |
|
Downloads a document from a document library to a local file |
|
Retrieves the item titles for a list into a DataCache |
|
Deletes a list item attachment |
|
Deletes a document |
|
Deletes a list item |
|
Validates that the resolved credentials can connect to and open the site |
Each overload accepts a ConnectionID argument for the recommended SharePointConnection-based authentication path described above, plus a large set of legacy per-call arguments (SiteUrl, AuthenticationPolicy, TenantID, ClientID, ClientSecret, ClientCertificate, ClientCertificatePassword, Username, Password, Domain, SiteType) that are used only when ConnectionID is omitted. When ConnectionID is specified, all of the legacy arguments are ignored.
For the full argument reference for every overload, see the online documentation: https://developer.dodecasoftware.com/dodeca/SharePoint/wbs-methods-documentation.html
Legacy AuthenticationPolicy values (used only without ConnectionID)
AuthenticationPolicy |
Description | Azure ACS dependency |
|---|---|---|
|
Uses the current Windows security context (NTLM/Negotiate/Kerberos). On-premises/extranet only. |
None |
|
Uses |
None |
|
Entra ID app-only token using |
None |
|
Entra ID delegated token using |
None |
|
Entra ID delegated token using |
None |
|
App-only token using |
Yes — see retirement notice above |
SiteType (Online, OnPrem, or Extranet) controls how DefaultNetworkCredentials/SpecifiedCredentials credentials are applied — Online uses SharePoint Online cookie-based auth, Extranet uses an explicit NTLM credential cache, and OnPrem passes the credential directly.
Logging and Diagnostics
What a failed operation reports
A failed lookup is reported in two places, because it has two audiences. The error states the conclusion, for the person who ran the view. The Smart Client log records the evidence behind it, for whoever has to diagnose it afterwards.
The error names what was concluded and where to look for the rest:
The specified document library or path could not be found. The folder "July" could not
be found in "Shared Documents/2026". The Smart Client log records the path that was
requested and what was found there.
Nothing in that message requires knowing how the connection is configured, and it exposes neither the structure of the site nor what the connection is permitted to do there.
The SharePointOperations overloads that take a DocumentLibraryPath or ListPath resolve that path against the site’s server-relative URL as reported by SharePoint, and then request the resulting URL. All three values are recorded in the log, so that a mistyped path can be told apart from one that was constructed incorrectly:
Supplied path: Shared Documents/Reports
Site URL reported by SharePoint: /sites/finance
URL requested from SharePoint: /sites/finance/Shared Documents/Reports
A duplicated site segment (/sites/finance/sites/finance/...) or an unexpectedly encoded character is visible immediately in the requested URL, without needing a network trace.
When a document library or folder cannot be resolved, the log also records how far along the path SharePoint could get, and what exists at that point:
Supplied path: Shared Documents/2026/July
Site URL reported by SharePoint: /teams/reports
URL requested from SharePoint: /teams/reports/Shared Documents/2026/July
Resolved as far as: /teams/reports/Shared Documents/2026
Folders found there: April, February, January, March, May, June
A path that was never valid and a path whose final folder has not been created yet produce the same "could not be found" on their own. Reporting the deepest part of the path that does resolve separates them: here the library and the year folder exist and only the month is missing, which is the ordinary outcome for a report that publishes into month-named folders before the month’s folder has been created. When nothing along the path resolves, no such line appears — that points at the site itself, the path’s leading segments, or access.
The folder listing is capped at 25 names, with a count of the remainder.
What SharePoint itself said is recorded too, because its own sentence separates an item that is absent from one the connection cannot reach without any investigation at all:
SharePoint reported: System.IO.FileNotFoundException: File Not Found.
SharePoint reported while investigating: System.UnauthorizedAccessException: Access denied.
The first line is what the lookup itself was told. The second appears when walking back up the path, or reading the permissions, was refused in a different way — which is the case the investigation exists to resolve, so the two are kept apart rather than the first standing for both. When both would say the same thing, only the first is written.
On SharePoint Online, when the document library or list itself could not be resolved, the log additionally records whether the connection can view items on the site, because SharePoint Online reports a library the connection cannot reach as though it does not exist. Add-items access is irrelevant to explaining a read lookup and is not reported here. This reporting is specific to the Online and Standard builds; the on-premises targets neither disguise an inaccessible library as a missing one nor use Sites.Selected grants, so their logs do not raise permissions:
Permissions available to this connection on this site: view items = yes
This connection can view items on this site, so the configured site URL or
document library path is the more likely problem.
| Reported permissions | Interpretation given |
|---|---|
View yes |
The configured site URL or library path is the more likely cause. This site-level result does not prove that a particular library is reachable |
View no |
A permissions problem rather than a missing path |
Not reported |
The permissions could not be read; access remains a possible cause |
Every interpretation that points at a site grant refers the reader to the Granting Sites.Selected Access to a Specific SharePoint Site section, and the log entry closes with that section’s published address:
SharePoint connector documentation:
https://developer.dodecasoftware.com/dodeca/dodeca-sharepoint-connector.html#granting-sites-selected-access-to-a-specific-sharepoint-site
The address is recorded once, on its own line, however many of the lines above refer to it. A section title alone leaves the reader searching, and whoever is reading this log is already stuck.
The error raised for the same failure reports only a conclusion the lookup or probes established, such as the missing folder or an explicit access denial, with no permission values, grant name, or documentation address. A site-level result of view items = yes does not by itself prove that a particular library is reachable, so it is not turned into advice that the path is wrong. Lack of add-items permission is reported as the conclusion of an actual failed write, not as the explanation for a read failure.
This view-items result is reported only when the library or list could not be resolved. When the container resolved and an item inside it was missing — a document that does not exist in a library the connection can read, for instance — neither the log nor the error raises permissions at all, because nothing suggests they are involved. The separate focused connection write test reports add-items access only after an actual upload fails, as described under Testing a SharePoint Connection.
A tolerated miss is recorded but not investigated. Establishing how far the path resolves and what the connection may do costs around ten round trips where the lookup itself took one. When ContinueOnItemNotFound is set, the operation is expected to miss — a script publishing into a folder it will create, or a loop downloading whatever happens to be present — and paying that on every iteration would invite throttling for a message nobody is going to see. The supplied path, the site URL, and the URL requested are still written to the log; the walk and the permissions read are not performed.
For a delegated connection, effective access is the intersection of the signed-in user’s permissions and the app’s site grant, so a permission reported as available to the connection may still be unavailable to the application acting alone. For an app-only connection, the reported permissions are the application’s own.
This permission describes the site, not a particular library. It is read from the web, and an application can report view items = yes and still be denied when it opens a specific document library. Treat the readout as a strong indication rather than proof: view items = yes does not guarantee that a given library can be reached.
Confirming a permissions cause conclusively. With request/response logging enabled, the response to the folder lookup carries the definitive signal. SharePoint returns HTTP 200 with the folder reported as non-existent, and adds a header naming the real reason:
X-MSDAVEXT_Error: 917656; Access denied. Before opening files in this location,
you must first browse to the web site and select the option to login automatically.
Look for that header on the response to the GetFolderByServerRelativeUrl request specifically. When it appears there and not on the surrounding requests, the library was not missing — it was unreachable, and the site grant is what needs fixing. This header is known to appear spuriously in some SharePoint Online responses, so weigh it by where it lands rather than by its presence alone.
Request and response logging
The connector writes its SharePoint traffic to the client’s request/response logging path, using the same toggle and the same folder as every other HTTP-based connector. Both the CSOM protocol calls and the binary transfers performed by document uploads and downloads are captured.
Enable the logging toggle and set the logging path before reproducing the failure. Whether content is captured is decided for each request as that request is created, so a toggle enabled partway through an operation captures only the requests issued after it — never the ones that have already gone out, which are usually the ones being investigated. Enable it first, then reproduce. While the toggle is off, no content is captured and no files are written — request and response streams are passed straight through untouched.
Each request and response is written as a separate file:
Request |
|
Response |
|
The files are written by the same writer the other Dodeca connectors use, so they carry the same naming and the same conventions. That writer became reachable to this connector in Dodeca 8.10. Dropped into an earlier client, the connector writes the files itself instead, naming them <tenant>.HttpWebRequest.<timestamp>-<n>.request.xml and <tenant>.HttpWebResponse.<timestamp>-<n>.<status>.response.txt and leaving JSON bodies unformatted. The contents are otherwise the same, and the same exclusions apply. The extension follows the content rather than the direction: .xml for a body that is XML, .yml otherwise. In practice the CSOM protocol requests are XML and their responses are JSON, so look for responses as .yml — searching the folder for .response.xml will find nothing. JSON bodies are indented rather than written as the single line they arrive as. Each file begins with the request line or status line and the headers, as comments.
Four limits apply, so that the folder stays small enough to collect and safe enough to send:
-
Credentials are excluded. The
Authorization,Cookie,Set-Cookie,X-RequestDigest,Username, andPasswordheaders are omitted from the logs. -
Uploaded documents are excluded. A document upload is sent as a multipart request carrying the protocol XML and the file as separate parts. The XML part is logged in full; the file’s part is replaced with a marker recording its size, so an uploaded document never reaches the log folder regardless of how small it is.
-
Request bodies are truncated beyond 256 KB, with a marker recording the full size.
-
Binary responses are recorded by size only. A response whose content type is not textual — which a downloaded Excel workbook, PDF, or image is — is reported as its byte count and content type rather than written to the log folder. A download whose content type is textual, such as a CSV or a text export, is written like any other textual body, subject to the 256 KB truncation. Treat the log folder as capable of holding the content of a downloaded text file.
Independently of the toggle, the Smart Client log records the method and URL of each SharePoint request, which is often enough to identify a wrongly constructed URL without collecting logs at all.
Client Certificate Formats
Wherever a client certificate is accepted (SharePointConnection.ClientCertificate, or the ClientCertificate WorkbookScript argument), the value may be any of:
-
A file path to a certificate file (optionally combined with
ClientCertificatePassword). -
A certificate thumbprint (40 or 64 hex characters), looked up first in
CurrentUser\My, thenLocalMachine\My. -
A base64-encoded certificate byte array (optionally combined with
ClientCertificatePassword).
Supported SharePoint Versions
The connector module is built separately for each SharePoint target, controlled by the SharePointVersion build property. Download the module build matching your SharePoint environment:
SharePointVersion |
Target |
|---|---|
|
SharePoint Online / Microsoft 365 |
|
SharePoint Online, built against the netstandard2.0 CSOM libraries |
|
On-premises SharePoint Server 2019 (and later on-prem releases using the same CSOM surface) |
|
On-premises SharePoint Server 2016 |
|
On-premises SharePoint Server 2013 |
On SharePoint 2013 and 2016, DocumentLibraryName or DocumentLibraryPath must be specified explicitly for document operations — there is no default document library fallback on those targets the way there is on 2019-and-later/Online.
Further Reading
-
Azure ACS retirement in Microsoft 365 — Microsoft’s official retirement announcement and timeline for Azure ACS in SharePoint Online.
-
SharePoint Add-ins and Azure ACS retirement FAQ — Answers to common questions about the retirement’s impact and how to check ACS usage in a tenant.
-
Upgrading SharePoint applications from Azure Access Control Service to Azure Active Directory — Microsoft’s migration guide for moving a
ClientSecret-based ACS app to Entra ID. -
Granting access via Entra ID App-Only — How to register an Entra ID app and configure certificate-based app-only access to SharePoint, the model used by this connector’s
ClientCertificate/OAuthClientCertificateflow. -
Register an application with the Microsoft identity platform — General Entra ID app registration quickstart, a prerequisite for any of the OAuth-based authentication modes above.
-
Redirect URI (reply URL) restrictions for public client apps — How to register the
https://login.microsoftonline.com/common/oauth2/nativeclientredirect URI (or a custom one) for a delegated/public-client Entra app registration. -
Overview of Selected permissions in OneDrive and SharePoint — Explains
Sites.Selected, the recommended Microsoft Graph permission for scoping an app registration’s SharePoint access to specific sites rather than the whole tenant. -
Understanding Resource-Specific Consent for Microsoft Graph and SharePoint Online — Background on resource-specific consent and how it applies to per-site Graph permissions.
-
Controlling app access on specific SharePoint site collections — Microsoft 365 Developer Blog walkthrough of granting
Sites.Selectedaccess to a specific site via the Graph site permissions endpoint. -
Create permission on a site — Graph API reference for the
POST /sites/{siteId}/permissionscall that creates a per-siteSites.Selectedgrant. -
Grant-PnPAzureADAppSitePermission — PnP PowerShell cmdlet for creating a per-site
Sites.Selectedgrant (withGet-/Set-/Revoke-counterparts for inspecting and managing existing grants).