SharePoint Connector - Permissions
4 min read
Overview
The SharePoint Connector requires specific permissions to access Microsoft Graph API and SharePoint REST API. This document lists all required permissions with their use cases.
Permission Summary
Content Sync (Required)
API | Permission | Type | Description |
|---|---|---|---|
Microsoft Graph |
| Application | Access to specifically granted sites |
Microsoft Graph |
| Application | Access to specifically granted document libraries |
Note: Use Sites.Selected for site-level access or Lists.SelectedOperations.Selected for more granular library-level access. Both can be enabled simultaneously for mixed access scenarios.
Important: These two permissions are not interchangeable. If library-level grants were issued (via Grant-PnPAzureADAppSitePermission -List) but the app registration only has Sites.Selected, requests to those libraries will return 403 Forbidden. The app registration must include Lists.SelectedOperations.Selected to honour library-level grants.
Permission Sync (Optional)
API | Permission | Type | Description |
|---|---|---|---|
Microsoft Graph |
| Application | Read group memberships |
Microsoft Graph |
| Application | Read basic user profiles |
SharePoint REST |
| Application | Access site groups |
Microsoft Graph Permissions
Content Mode
These APIs are used for fetching SharePoint content:
API Endpoint | Method | Use Case | Permission |
|---|---|---|---|
| GET | Fetch site metadata |
|
| GET | Fetch document libraries |
|
| GET | Fetch folder children |
|
| GET | Download file content |
|
| GET | Find SitePages list |
|
| GET | List ASPX pages |
|
| GET | Get ASPX page content |
|
| GET | Discover child subsites |
|
Either permission covers the endpoints above. A library-level grant via Lists.SelectedOperations.Selected also provides access to basic site information (metadata, drives listing) for the site that hosts the granted library.
Permission Mode
These APIs are used when permission sync is enabled:
API Endpoint | Method | Use Case | Permission |
|---|---|---|---|
| GET | Fetch file/folder permissions |
|
| GET | Fetch ASPX page permissions (beta) |
|
| GET | Read Entra ID group members |
|
| GET | Read Entra ID group owners |
|
SharePoint REST Permissions
These APIs are only used when permission sync is enabled:
API Endpoint | Method | Use Case | Permission |
|---|---|---|---|
| GET | Read site group details |
|
| GET | Read site group members |
|
Note: If "Who can view the membership of the group?" is not set to Everyone, the connector cannot read group members. The app principal must be a member/owner of the group or hold Full Control.
Public Sites and Tenant-Wide Visibility Groups
Public SharePoint sites may include tenant-wide principals such as Everyone and Everyone except external users. These principals are intentionally not expanded by the connector for permission sync. This can lead to expected differences where content is visible in SharePoint through tenant-wide visibility but not mirrored as broad visibility in Unique.
Why Sites.Selected?
Least Privilege Principle
Sites.Selected follows the principle of least privilege:
Permission | Scope | Admin Control |
|---|---|---|
| All sites in tenant | None (all sites exposed) |
| All sites in tenant | None (all sites exposed) |
| Only granted sites | Per-site grants required |
Benefits
Explicit access: Each site must be explicitly granted
Auditability: Clear record of which sites are accessible
Revocability: Access can be revoked per-site
Compliance: Meets enterprise security requirements
Granting Sites.Selected Access
Access is granted via PowerShell:
# Connect to SharePoint Admin
Connect-PnPOnline -Url "https://{tenant}-admin.sharepoint.com" -Interactive
# Grant access to a specific site
Grant-PnPAzureADAppSitePermission `
-AppId "{client-id}" `
-DisplayName "Unique SharePoint Connector" `
-Site "https://{tenant}.sharepoint.com/sites/{site-name}" `
-Permissions WriteSee Authentication Guide for detailed instructions.
Permission Justification
Sites.Selected
Justification: Required to read site structure, document libraries, and file content from specifically granted SharePoint sites.
Why not Sites.Read.All?
Sites.Read.Allgrants access to all sites in the tenantMost organizations require explicit site-by-site access control
Sites.Selectedallows administrators to control exactly which sites are accessible
Lists.SelectedOperations.Selected
Justification: For more granular access control at the document library level instead of the entire site.
When to use?
When only specific document libraries need to be synced
When site-level access is too broad for compliance requirements
Combined with
Sites.Selectedfor mixed access scenarios
GroupMember.Read.All
Justification: Required to expand Entra ID (Azure AD) group memberships when syncing permissions.
Why needed?
SharePoint permissions often reference Entra ID groups
To sync permissions, the connector must resolve group members
Without this permission, group-based permissions cannot be synced
User.ReadBasic.All
Justification: Required to read basic profile information (email, display name) for permission mapping.
Why needed?
Permission entries reference users by ID
Connector needs email/username to map to Unique users
Only basic profile fields are accessed (not full profile)
Admin Consent
All permissions require admin consent because they are application permissions:

Consent URL
https://login.microsoftonline.com/{tenant-id}/v2.0/adminconsent
?client_id={app-id}
&scope=https://graph.microsoft.com/.defaultApplication vs Delegated Permissions
The SharePoint Connector uses application permissions (not delegated):
Aspect | Application | Delegated |
|---|---|---|
User context | None (service account) | Signed-in user |
Consent | Admin only | User or admin |
Access scope | As configured | Limited by user access |
Use case | Background services | User-interactive apps |
Why application permissions?
Connector runs as a background service
No user is signed in during sync
Consistent access regardless of individual user permissions
Rate Limits
Microsoft Graph enforces rate limits:
Limit Type | Value | Scope |
|---|---|---|
Requests per app | ~10,000 / 10 min | Per app registration |
Concurrent requests | 4 per app per resource | Per resource type |
The connector respects these limits via:
Configurable rate limiting (
graphApiRateLimitPerMinuteThousandsin the tenant configuration YAML)Exponential backoff on 429 responses
Concurrent request limiting
Related Documentation
Authentication - Azure AD setup and permissions
Architecture - System components
Flows - Permission sync flow details
Standard References
Microsoft Graph Permissions Reference - Complete permissions list
Sites.Selected Permission - Sites.Selected documentation
Application vs Delegated Permissions - Permission types explained