Unable to Clone SharePoint Context from tenant to Specific Site Collection in Azure AD App

%3CLINGO-SUB%20id%3D%22lingo-sub-139892%22%20slang%3D%22en-US%22%3EUnable%20to%20Clone%20SharePoint%20Context%20from%20tenant%20to%20Specific%20Site%20Collection%20in%20Azure%20AD%20App%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-139892%22%20slang%3D%22en-US%22%3E%3CP%3E%3CSPAN%3EI%20Created%20a%20web%20application%20with%20Azure%20AD%20authentication%20using%20Azure%20AD%20Application.%20I%20had%20granted%20all%20permission%20for%20SharePoint%20Online%2C%20Graph%20API%20and%20Active%20Directory%20to%20the%20App%20for%20provisioning%20Site%20collections(creation%20and%20Deletion)%20which%20is%20working%20fine.%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%3CSPAN%3EIn%20my%20web%20application%2C%20I%20am%20accessing%20the%20site%20collections%20through%20tenant%20Context(%3CCODE%3E%3CA%20href%3D%22https%3A%2F%2Ftenant-admin.sharepoint.com%22%20target%3D%22_blank%22%20rel%3D%22nofollow%20noopener%20noreferrer%20noopener%20noreferrer%22%3Ehttps%3A%2F%2Ftenant-admin.sharepoint.com%3C%2FA%3E%3C%2FCODE%3E)%20using%20access%20tokens%20from%20the%20Azure%20AD%20App.%20I%20am%20trying%20to%20switch%20the%20client%20context%20of%20tenant%20to%20Site%20Collection%26nbsp%3B%20Context%20using%20the%26nbsp%3B%3CSTRONG%3Eclone%26nbsp%3B%3C%2FSTRONG%3Emethod%20in%26nbsp%3B%3CSTRONG%3E%26nbsp%3BOfficeDevPnP.Core.%3C%2FSTRONG%3E%20Below%20is%20the%20code%20sample.%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CPRE%3E%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20tenant%20%3D%20new%20Tenant(spcontext)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20spcontext.Load(tenant)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20spcontext.ExecuteQuery()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20site%20%3D%20tenant.GetSiteByUrl(webUrl)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20spcontext.Load(site)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20spcontext.Load(site.RootWeb)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20spcontext.ExecuteQuery()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20string%20pageName%20%3D%20%22mypage.aspx%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ClientSidePage%20page%20%3D%20ClientSidePage.Load(spcontext%2C%20pageName)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20components%20%3D%20page.AvailableClientSideComponents()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20string%20wpName%20%3D%20%22Intranet%20Manager%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20List%26lt%3Bstring%26gt%3B%20componentsnames%20%3D%20components.Select(k%20%3D%26gt%3B%20k.Name).ToList()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20webPartToAdd%20%3D%20components.Where(wp%20%3D%26gt%3B%20wp.ComponentType%20%3D%3D%201%20%26amp%3B%26amp%3B%20wp.Name%20%3D%3D%20wpName).FirstOrDefault()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20(webPartToAdd%20!%3D%20null)%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20ClientSideWebPart%20clientWp%20%3D%20new%20ClientSideWebPart(webPartToAdd)%20%7B%20Order%20%3D%20-1%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20page.AddControl(clientWp)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20page.Save(pageName)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20spcontext.ExecuteQuery()%3B%3C%2FPRE%3E%0A%3CP%3E%3CSPAN%3EI%20am%20getting%20the%20error%26nbsp%3BI%20am%20Getting%20the%20error%20%3CSTRONG%3E%22The%20remote%20server%20returned%20an%20error%3A%20(401)%20Unauthorized.%22%20at%20the%20line%20ClientSidePage%20page%20%3D%20ClientSidePage.Load(newSiteContext%2C%20pageName)%3B%3C%2FSTRONG%3E%3C%2FSPAN%3E%3C%2FP%3E%0A%3CP%3E%26nbsp%3B%3C%2FP%3E%0A%3CP%3E%3CSPAN%3EIf%20we%20pass%20user%20credentials%20with%20the%20necessary%26nbsp%3Bpermission%20for%20creating%20the%20tenant%20Context%2C%20the%20clone%20was%20working%20as%20fine.%20When%20we%26nbsp%3Btried%20to%20the%20same%20with%20the%26nbsp%3Baccess%20tokens%20we%20are%20getting%20the%20above%20error.%20The%20Azure%20AD%20App%20is%20given%20all%20required%20permission%20in%20the%20Azure%20portal.%3C%2FSPAN%3E%3C%2FP%3E%3C%2FLINGO-BODY%3E%3CLINGO-LABS%20id%3D%22lingo-labs-139892%22%20slang%3D%22en-US%22%3E%3CLINGO-LABEL%3EAzure%20AD%20Apps%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3ECSOM%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3EPnP%3C%2FLINGO-LABEL%3E%3CLINGO-LABEL%3ESharePoint%20Online%3C%2FLINGO-LABEL%3E%3C%2FLINGO-LABS%3E
New Contributor

I Created a web application with Azure AD authentication using Azure AD Application. I had granted all permission for SharePoint Online, Graph API and Active Directory to the App for provisioning Site collections(creation and Deletion) which is working fine.

 

In my web application, I am accessing the site collections through tenant Context(https://tenant-admin.sharepoint.com) using access tokens from the Azure AD App. I am trying to switch the client context of tenant to Site Collection  Context using the clone method in  OfficeDevPnP.Core. Below is the code sample.

 

              var tenant = new Tenant(spcontext);
                spcontext.Load(tenant);
                spcontext.ExecuteQuery();
                var site = tenant.GetSiteByUrl(webUrl);
                spcontext.Load(site);
                spcontext.Load(site.RootWeb);
                spcontext.ExecuteQuery();
                string pageName = "mypage.aspx";
                ClientSidePage page = ClientSidePage.Load(spcontext, pageName);
                var components = page.AvailableClientSideComponents();
                string wpName = "Intranet Manager";
                List<string> componentsnames = components.Select(k => k.Name).ToList();
                var webPartToAdd = components.Where(wp => wp.ComponentType == 1 && wp.Name == wpName).FirstOrDefault();
                if (webPartToAdd != null)
                {
                    ClientSideWebPart clientWp = new ClientSideWebPart(webPartToAdd) { Order = -1 };
                    page.AddControl(clientWp);
                }
                page.Save(pageName);
                spcontext.ExecuteQuery();

I am getting the error I am Getting the error "The remote server returned an error: (401) Unauthorized." at the line ClientSidePage page = ClientSidePage.Load(newSiteContext, pageName);

 

If we pass user credentials with the necessary permission for creating the tenant Context, the clone was working as fine. When we tried to the same with the access tokens we are getting the above error. The Azure AD App is given all required permission in the Azure portal.

0 Replies