<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: Programmatically add a user to the SharePoint UIL from Fabric after ACS retirement? in Data Engineering</title>
    <link>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5190416#M16459</link>
    <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.fabric.microsoft.com/t5/user/viewprofilepage/user-id/891475"&gt;@MathieuSGA&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;Yes, the screenshot you shared shows the correct area in Azure where the certificate gets attached to the App Registration under the Certificates tab. Typically, the certificate itself is first generated externally (for example via PowerShell or Azure Key Vault) as a .cer + .pfx pair and then the public certificate is uploaded there. Your Fabric notebook approach is also aligned with the current MSAL + certificate + Key Vault pattern Microsoft recommends for modern SharePoint app-only authentication.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;The general flow would be to generate a certificate, upload the public certificate to the App Registration, store the PFX securely in Key Vault, retrieve it from Fabric at runtime and then use MSAL certificate authentication instead of a client secret to acquire the SharePoint token.&lt;/P&gt;
&lt;P&gt;That said, I would still treat this as a validation step specifically for /_api/web/ensureuser. Microsoft documents certificate-based Entra app-only authentication for SharePoint Online REST APIs generally, but I could not find clear documentation confirming that /_api/web/ensureuser specifically supports app-only execution. So, the setup itself looks correct, but ensureuser may (mostly not) still reject the token requiring delegated user context.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;&lt;LI-WRAPPER&gt;&lt;SPAN data-teams="true"&gt;Hope it helps to resolve your issue.&lt;BR /&gt;Regards,&lt;BR /&gt;Community Support Team.&lt;/SPAN&gt;&lt;/LI-WRAPPER&gt;&lt;/P&gt;</description>
    <pubDate>Fri, 29 May 2026 09:47:59 GMT</pubDate>
    <dc:creator>v-hjannapu</dc:creator>
    <dc:date>2026-05-29T09:47:59Z</dc:date>
    <item>
      <title>Programmatically add a user to the SharePoint UIL from Fabric after ACS retirement?</title>
      <link>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5188973#M16400</link>
      <description>&lt;P&gt;Hello Fabric Community,&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;I'm facing a roadblock with SharePoint integration from Microsoft Fabric, and I hope you can help clarify the modern, supported approach.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Context and app registration configuration&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;We have an Azure AD (Entra ID) app registration with the following API permissions, both **granted and admin-consented**:&lt;/P&gt;&lt;TABLE border="1"&gt;&lt;TBODY&gt;&lt;TR&gt;&lt;TD&gt;API&lt;/TD&gt;&lt;TD&gt;Permission&lt;/TD&gt;&lt;TD&gt;Type&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;Microsoft Graph&lt;/TD&gt;&lt;TD&gt;Sites.FullControl.All&lt;/TD&gt;&lt;TD&gt;Application&lt;/TD&gt;&lt;/TR&gt;&lt;TR&gt;&lt;TD&gt;SharePoint&lt;/TD&gt;&lt;TD&gt;Sites.FullControl.All&lt;/TD&gt;&lt;TD&gt;Application&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;In our Fabric notebook, secrets (tenant ID, client ID, client secret) are retrieved at runtime from **Azure Key Vault** using `notebookutils.credentials.getSecret()`. No credentials are hardcoded or stored in the notebook. We use MSAL (`ConfidentialClientApplication`) with the `client_credentials` flow to acquire tokens.&lt;/P&gt;&lt;P&gt;We verified both tokens are correctly issued and contain `Sites.FullControl.All` in their `roles` claim — so the permissions are in order. **Read operations on SharePoint (listing lists, reading items, resolving already-present users) work perfectly.**&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;The blocker — the User Information List (UIL):&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;The UIL is a hidden system list present on every SharePoint site. It references all users who have ever interacted with the site. **A user absent from the UIL cannot be referenced in a Person or Group field** — you cannot just pass an email address directly.&lt;/P&gt;&lt;P&gt;This is a "lazy provisioning" model: the UIL is not a direct mirror of Azure AD / Entra ID. It is populated on-demand, either when a user first accesses the site, or when `_api/web/ensureuser` is explicitly called. If the employee has never opened SharePoint for this site, they simply do not exist in the UIL yet.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;What we tried:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;The only documented way to provision a user in the UIL programmatically is via:&lt;/P&gt;&lt;P&gt;```&lt;BR /&gt;POST https://&amp;lt;tenant&amp;gt;.sharepoint.com/sites/&amp;lt;site&amp;gt;/_api/web/ensureuser&lt;BR /&gt;Body: { "logonName": "i:0#.f|membership|user@domain.com" }&lt;BR /&gt;```&lt;/P&gt;&lt;P&gt;When called using our **AAD app-only token** (the one confirmed to carry `Sites.FullControl.All`), this returns:&lt;/P&gt;&lt;P&gt;```&lt;BR /&gt;HTTP 401 — "Unsupported app only token"&lt;BR /&gt;```&lt;/P&gt;&lt;P&gt;This is documented behavior: `ensureuser` requires a **delegated token** (issued on behalf of a real signed-in user), not an app-only token.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Why the usual workarounds are closed:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;- **Azure ACS (SharePoint Add-in model):** Retired as of April 2026. No longer functional — no new tokens can be issued. This legacy path is gone.&lt;BR /&gt;- **ROPC (Resource Owner Password Credentials) with a service account:** Not possible in our tenant — MFA is enforced on all accounts with no exception.&lt;/P&gt;&lt;P&gt;We have **not found any Microsoft Graph API endpoint** capable of directly provisioning a user into the SharePoint UIL, or writing to a Person field for a user not yet present in the UIL.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;Our questions:&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;1. Is there any supported, **non-interactive (unattended)** way to provision a user in the SharePoint UIL from Fabric, now that ACS is retired and ROPC is blocked?&lt;BR /&gt;2. Has anyone successfully used **Microsoft Graph** or **Power Automate** as a workaround to "preload" users into the UIL for unattended pipelines?&lt;BR /&gt;3. Is there a way to write to a Person or Group field using only the user's UPN or Object ID, **bypassing the UIL lookup entirely**?&lt;/P&gt;&lt;P&gt;Any detailed guidance, workarounds, or official documentation references are very welcome. Thank you!&lt;/P&gt;</description>
      <pubDate>Tue, 26 May 2026 16:00:05 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5188973#M16400</guid>
      <dc:creator>MathieuSGA</dc:creator>
      <dc:date>2026-05-26T16:00:05Z</dc:date>
    </item>
    <item>
      <title>Re: Programmatically add a user to the SharePoint UIL from Fabric after ACS retirement?</title>
      <link>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5189332#M16413</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.fabric.microsoft.com/t5/user/viewprofilepage/user-id/891475"&gt;@MathieuSGA&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;Thank you &amp;nbsp;for reaching out to the Microsoft fabric community forum.&lt;/P&gt;
&lt;P&gt;Your understanding of the UIL behavior is correct. SharePoint Person/Group fields still depend on the site’s User Information List, so users must exist in the UIL before those fields can be populated successfully. One important detail is that your current implementation uses Entra app-only with a client secret. Microsoft’s supported modern model for SharePoint Online app-only REST access is certificate-based authentication and client-secret app-only tokens are known to cause the Unsupported app only token error in SharePoint REST scenarios.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;However, I could not find any official Microsoft documentation explicitly confirming whether /_api/web/ensureuser supports or rejects certificate-based Entra app-only authentication. Microsoft also does not provide a Graph API to preload users into the UIL and there is no documented way to bypass the UIL dependency using only UPN or Object ID. So, at this point, certificate-based Entra app-only auth is still worth testing against ensureuser, since it is the only remaining supported unattended model. If that still fails with Unsupported app only token, then there likely is no fully supported unattended UIL provisioning path remaining after ACS retirement.&lt;/P&gt;
&lt;P&gt;In practice, the remaining reliable options are delegated bootstrap flows like Power Automate running in user context or having users access the SharePoint site once so they are automatically added to the UIL.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;Please check below documentation for your reference:&lt;/P&gt;
&lt;P&gt;&lt;A title="https://learn.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs" href="https://learn.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azureacs" rel="noreferrer noopener" target="_blank"&gt;Granting access using SharePoint App-Only | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A title="https://learn.microsoft.com/en-us/answers/questions/1343048/azuread-sahrepoint-connexion-invalid-client-secret" href="https://learn.microsoft.com/en-us/answers/questions/1343048/azuread-sahrepoint-connexion-invalid-client-secret" rel="noreferrer noopener" target="_blank"&gt;AzureAd/Sahrepoint connexion - Invalid client secret error in Access token request with a certifica…&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A title="https://learn.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azuread" href="https://learn.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly-azuread" rel="noreferrer noopener" target="_blank"&gt;Granting access via Entra ID App-Only | Microsoft Learn&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A title="https://learn.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly" href="https://learn.microsoft.com/en-us/sharepoint/dev/solution-guidance/security-apponly" rel="noreferrer noopener" target="_blank"&gt;Accessing SharePoint using an application context, also known as app-only | Microsoft Learn&lt;/A&gt;&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;Hope this helps if you have any queries we are&amp;nbsp; happy to assist you further.&lt;BR /&gt;Regards,&lt;BR /&gt;Community Support Team.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Wed, 27 May 2026 09:50:01 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5189332#M16413</guid>
      <dc:creator>v-hjannapu</dc:creator>
      <dc:date>2026-05-27T09:50:01Z</dc:date>
    </item>
    <item>
      <title>Re: Programmatically add a user to the SharePoint UIL from Fabric after ACS retirement?</title>
      <link>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5189488#M16420</link>
      <description>&lt;P&gt;Sounds interesting/promising !&lt;BR /&gt;&lt;BR /&gt;As for the steps ahead, would you happen to have more detailed step-by-step guide to how to:&lt;BR /&gt;- generate a credential in Azure&lt;BR /&gt;- be able to use it in a Fabric Notebook to generate/acquire a token that would allow us to call the `_api/web/ensureuser` with a successfull outcome&lt;BR /&gt;&lt;BR /&gt;As for some additional context here are ...&lt;BR /&gt;&lt;BR /&gt;... a printscreen of the Azure App config menu - could you confirm part of the job happens here ?&lt;/P&gt;&lt;P&gt;&lt;span class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="MathieuSGA_0-1779892494172.png" style="width: 400px;"&gt;&lt;img src="https://community.fabric.microsoft.com/t5/image/serverpage/image-id/1350353i6215C672257005E7/image-size/medium?v=v2&amp;amp;px=400" role="button" title="MathieuSGA_0-1779892494172.png" alt="MathieuSGA_0-1779892494172.png" /&gt;&lt;/span&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;... a snippet of code I found &lt;A href="https://heyniels.com/2026/03/15/connect-fabric-to-sharepoint-after-the-acs-retirement/#:~:text=import%20base64%2C%20msal,microsoftonline.com/%7Btenant_id%7D%22%0A)" target="_self"&gt;here&lt;/A&gt;&amp;nbsp;to supposedly retrieve a certificate that would have been store in an Azure KeyVault Secret&lt;/P&gt;&lt;LI-CODE lang="python"&gt;import base64, msal
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.serialization import pkcs12, Encoding, PrivateFormat, NoEncryption

# 1. Load credentials from Azure Key Vault
kv_url        = "https://your-keyvault.vault.azure.net"
tenant_id     = notebookutils.credentials.getSecret(kv_url, "sp-tenant-id")
client_id     = notebookutils.credentials.getSecret(kv_url, "sp-client-id")
cert_pfx_b64  = notebookutils.credentials.getSecret(kv_url, "sp-certificate")

# 2. Parse the PFX to extract what MSAL needs
private_key, certificate, _ = pkcs12.load_key_and_certificates(
    base64.b64decode(cert_pfx_b64), password=None
)
private_key_pem = private_key.private_bytes(Encoding.PEM, PrivateFormat.TraditionalOpenSSL, NoEncryption()).decode()
thumbprint      = certificate.fingerprint(hashes.SHA1()).hex().upper()

# 3. Acquire an access token
app = msal.ConfidentialClientApplication(
    client_id=client_id,
    client_credential={"private_key": private_key_pem, "thumbprint": thumbprint},
    authority=f"https://login.microsoftonline.com/{tenant_id}"
)&lt;/LI-CODE&gt;&lt;P&gt;&lt;BR /&gt;Would you happen to need any additional intel to help: I am available to provide them asap.&lt;/P&gt;</description>
      <pubDate>Wed, 27 May 2026 14:35:40 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5189488#M16420</guid>
      <dc:creator>MathieuSGA</dc:creator>
      <dc:date>2026-05-27T14:35:40Z</dc:date>
    </item>
    <item>
      <title>Re: Programmatically add a user to the SharePoint UIL from Fabric after ACS retirement?</title>
      <link>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5190416#M16459</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.fabric.microsoft.com/t5/user/viewprofilepage/user-id/891475"&gt;@MathieuSGA&lt;/a&gt;,&lt;/P&gt;
&lt;P&gt;Yes, the screenshot you shared shows the correct area in Azure where the certificate gets attached to the App Registration under the Certificates tab. Typically, the certificate itself is first generated externally (for example via PowerShell or Azure Key Vault) as a .cer + .pfx pair and then the public certificate is uploaded there. Your Fabric notebook approach is also aligned with the current MSAL + certificate + Key Vault pattern Microsoft recommends for modern SharePoint app-only authentication.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;The general flow would be to generate a certificate, upload the public certificate to the App Registration, store the PFX securely in Key Vault, retrieve it from Fabric at runtime and then use MSAL certificate authentication instead of a client secret to acquire the SharePoint token.&lt;/P&gt;
&lt;P&gt;That said, I would still treat this as a validation step specifically for /_api/web/ensureuser. Microsoft documents certificate-based Entra app-only authentication for SharePoint Online REST APIs generally, but I could not find clear documentation confirming that /_api/web/ensureuser specifically supports app-only execution. So, the setup itself looks correct, but ensureuser may (mostly not) still reject the token requiring delegated user context.&lt;BR /&gt;&lt;BR /&gt;&lt;/P&gt;
&lt;P&gt;&lt;LI-WRAPPER&gt;&lt;SPAN data-teams="true"&gt;Hope it helps to resolve your issue.&lt;BR /&gt;Regards,&lt;BR /&gt;Community Support Team.&lt;/SPAN&gt;&lt;/LI-WRAPPER&gt;&lt;/P&gt;</description>
      <pubDate>Fri, 29 May 2026 09:47:59 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5190416#M16459</guid>
      <dc:creator>v-hjannapu</dc:creator>
      <dc:date>2026-05-29T09:47:59Z</dc:date>
    </item>
    <item>
      <title>Re: Programmatically add a user to the SharePoint UIL from Fabric after ACS retirement?</title>
      <link>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5191734#M16493</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.fabric.microsoft.com/t5/user/viewprofilepage/user-id/891475"&gt;@MathieuSGA&lt;/a&gt;,&lt;BR /&gt;I hope the information provided above assists you in resolving the issue. If you have any additional questions or concerns, please do not hesitate to contact us. We are here to support you and will be happy to help with any further assistance you may need.&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Community Support Team.&lt;/P&gt;</description>
      <pubDate>Tue, 02 Jun 2026 04:10:21 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5191734#M16493</guid>
      <dc:creator>v-hjannapu</dc:creator>
      <dc:date>2026-06-02T04:10:21Z</dc:date>
    </item>
    <item>
      <title>Re: Programmatically add a user to the SharePoint UIL from Fabric after ACS retirement?</title>
      <link>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5193439#M16553</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.fabric.microsoft.com/t5/user/viewprofilepage/user-id/891475"&gt;@MathieuSGA&lt;/a&gt;,&lt;BR /&gt;I hope the above details help you fix the issue. If you still have any questions or need more help, feel free to reach out. We are always here to support you.&lt;BR /&gt;&lt;BR /&gt;&lt;BR /&gt;Regards,&lt;BR /&gt;Community Support Team.&lt;/P&gt;</description>
      <pubDate>Fri, 05 Jun 2026 04:05:29 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5193439#M16553</guid>
      <dc:creator>v-hjannapu</dc:creator>
      <dc:date>2026-06-05T04:05:29Z</dc:date>
    </item>
    <item>
      <title>Re: Programmatically add a user to the SharePoint UIL from Fabric after ACS retirement?</title>
      <link>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5195043#M16604</link>
      <description>&lt;P&gt;The resolution process is "On Hold" for now since I need my Azure Admin to help me implement the provided approach&lt;/P&gt;</description>
      <pubDate>Tue, 09 Jun 2026 13:16:55 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5195043#M16604</guid>
      <dc:creator>MathieuSGA</dc:creator>
      <dc:date>2026-06-09T13:16:55Z</dc:date>
    </item>
    <item>
      <title>Re: Programmatically add a user to the SharePoint UIL from Fabric after ACS retirement?</title>
      <link>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5210121#M16726</link>
      <description>&lt;P&gt;Hi&amp;nbsp;&lt;a href="https://community.fabric.microsoft.com/t5/user/viewprofilepage/user-id/891475"&gt;@MathieuSGA&lt;/a&gt;,&lt;BR /&gt;&lt;SPAN data-teams="true"&gt;&amp;nbsp;Thanks for the update, please do let us know once it is solved. If you have any other issues, please feel free to create a new post, we are always happy to help.&lt;BR /&gt;&lt;BR /&gt;&lt;/SPAN&gt;Regards,&lt;BR /&gt;Community Support Team.&lt;/P&gt;</description>
      <pubDate>Wed, 17 Jun 2026 10:00:26 GMT</pubDate>
      <guid>https://community.fabric.microsoft.com/t5/Data-Engineering/Programmatically-add-a-user-to-the-SharePoint-UIL-from-Fabric/m-p/5210121#M16726</guid>
      <dc:creator>v-hjannapu</dc:creator>
      <dc:date>2026-06-17T10:00:26Z</dc:date>
    </item>
  </channel>
</rss>

