Connect Sharepoint With AppID Certificate

On 21/03/2023 1

In SharepointCode

Connect to Sharepoint using app registration and certificate

 



using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Graph;
using PnP.Core.Auth;
using PnP.Core.Auth.Services.Builder.Configuration;
using PnP.Core.Services;
using PnP.Core.Services.Builder.Configuration;
using System.Security.Cryptography.X509Certificates;
using System.Threading.Tasks;


namespace HGH.Buisiness4
{
    public class SPTools2 : IDisposable
    {
        private IHost _host;


        public SPTools2()
        {

        }

        public async Task Connect(string appId, string tenantId, string siteUrl, string thumbprint, StoreName storeName, StoreLocation storeLocation)
        {
            try
            {
                _host = Host.CreateDefaultBuilder()
               .ConfigureServices((hostingContext, services) =>
               {
                   // Add the PnP Core SDK library
                   services.AddPnPCore(options =>
                   {
                       options.Sites.Add("SiteToWorkWith", new PnPCoreSiteOptions
                       {
                           SiteUrl = siteUrl
                       });
                   });
                   services.AddPnPCoreAuthentication(
                       options =>
                       {
                           // Configure an Authentication Provider relying on Windows Credential Manager
                           options.Credentials.Configurations.Add("x509certificate",
                               new PnPCoreAuthenticationCredentialConfigurationOptions
                               {
                                   ClientId = appId,
                                   TenantId = tenantId,
                                   X509Certificate = new PnPCoreAuthenticationX509CertificateOptions
                                   {
                                       StoreName = storeName,
                                       StoreLocation = storeLocation,
                                       Thumbprint = thumbprint
                                   }
                               });

                           // Configure the default authentication provider
                           options.Credentials.DefaultConfiguration = "x509certificate";

                           // Map the site defined in AddPnPCore with the 
                           // Authentication Provider configured in this action
                           options.Sites.Add("SiteToWorkWith",
                               new PnPCoreAuthenticationSiteOptions
                               {
                                   AuthenticationProviderName = "x509certificate"
                               });
                       });


               })
            // Let the builder know we're running in a console
            .UseConsoleLifetime()
            // Add services to the container
            .Build();
                await _host.StartAsync();
            }
            catch (Exception ex)
            {
                Console.WriteLine($"ERROR SPTools2 appId {appId} siteUrl {siteUrl} thumbprint {thumbprint} {ex}");
                throw new Exception($"ERROR SPTools2 appId {appId} siteUrl {siteUrl} thumbprint {thumbprint}", ex);
            }
            return 1;
        }

        public async Task LoadWeb()
        {
            try
            {
                // Optionally create a DI scope
                using (var scope = _host.Services.CreateScope())
                {
                    // Obtain a PnP Context factory
                    var pnpContextFactory = scope.ServiceProvider
                        .GetRequiredService();
                    // Use the PnP Context factory to get a PnPContext for the given configuration
                    using (var context = await pnpContextFactory.CreateAsync("SiteToWorkWith"))
                    {
                        // Retrieving web with lists and masterpageurl loaded ==> SharePoint REST query
                        var web = await context.Web.GetAsync(p => p.Title, p => p.Lists,
                        p => p.MasterUrl);

                        Console.WriteLine($"Web Title {web.Title} Loaded");
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"ERROR LoadWeb{ex}");
                throw new Exception($"ERROR LoadWeb ", ex);
            }
            return 1;
        }

        public void Dispose()
        {
            if (_host != null)
                _host.Dispose();
        }
    }
}


 

 

 

Sharepoint

Comments

  • Jayrn Smith

    1 Jayrn Smith On 22/04/2026

    Hey,it’s Jayrn.

    There’s a pattern I keep seeing…

    People who *work hard*, try different strategies, even invest in tools…

    …but still don’t see consistent results.

    It’s not because they’re lazy.
    It’s not because they’re unlucky.

    It’s because they’re following **disconnected advice**.

    One strategy here.
    Another tactic there.

    No real understanding of what actually drives revenue.

    And when you don’t understand the “why”…

    You’re stuck guessing.

    ---

    That’s exactly where I was.

    Until I started studying something different:

    Not surface-level tactics…

    …but the **actual thinking behind successful marketing campaigns**.

    That’s when things finally started to click.

    ---

    If you want to see what I mean, take a look at this:

    �� https://marketersmentor.com/NO-BS-Letter.php?refer=fdisharepoint.com

    Even just reading the page will shift how you think about marketing.

    More tomorrow.


    Jayrn

    P.S.: I’m Jayrn, a digital marketer and e-commerce seller with a passion for sharing knowledge. I share proven strategies, tips, and resources to help you grow your online business.

    My Blog:
    https://www.jayrn.com
    Unsubscribe:
    https://marketersmentor.com/unsubscribe.php?d=fdisharepoint.com

Add a comment