I was working on an Azure Function recently that used the OfficeDevPnPCore AuthenticationManager() class with the GetAzureADAppOnlyAuthenticatedContext() method to get an app only authentication context.
I was running into the very helpful error message of “Object reference not set to the instance of an object”.
After a little digging around I came across the following GitHub issue when pointed me in the right direction. https://github.com/SharePoint/PnP-Sites-Core/issues/1568
The problem seems to be with the latest runtime. I was running version 1.0.9 of the Azure Functions Core Tools to locally debug the function.
If you look at the app settings for your function in the portal, you will see that there is a setting called “FUNCTIONS_EXTENSION_VERSION” and this will be set to the value ~1 which means use the latest runtime.
The solution to being able to run this above code on Azure was to force the runtime to use a particular version. I set mine to 1.0.11388 which got everything working again.
However I still needed to debug the function locally so I needed to update my local version of the core tools.
If you open a command prompt and type
you will see which runtime you have installed.
As you can see I had version 1.0.9 installed. I looked through the releases on GitHub at https://github.com/Azure/azure-functions-core-tools/releases and decided to downgrade my tools to version 1.0.7.
After downgrading to version 1.0.7 I found that the above app only auth call started to work again.
In my video here I show a quick demo of how to include the components in your own web application.
Inevitably you will want to secure your web service layer at some point and if your are building on the Azure platform, then Azure AD is a great OAuth solution.
It is especially a good solution if you are building SharePoint Add-Ins in Office 365. When you are logged into your Office 365 SharePoint site you have already authenticated against your Azure AD and as long as you deploy your applications to the same Azure AD instance then you get automatically authenticated when accessing your Web API layer.
The general architecture looks like this.
The first video is up and it shows how to create a SQL Azure database, create a Web API layer and how to model and scaffold the data using Entity Framework.