Refer to the GIF below for a better understanding.
- The trademark or brand element of Facebook is not allowed to be used as the Display Name of your Facebook App. Therefore, words such as FB, Face, Book, Insta, etc. cannot be used as Display Name.
Installing Facebook authentication middleware NuGet package
To configure the ASP.NET Core middleware for Facebook authentication we need to install the NuGet package in our application. The version of this NuGet package must match the version of .NET Core 3 which we are using in our project.
Open https://www.nuget.org/packages/Microsoft.AspNetCore.Authentication.Facebook/. Select the version of .NET Core 3 from the “Version History”. Copy the command from the “package manager” tab. Run this command in the NuGet package manager console of our application.
For this application, we are using .NET Core 3.0.0-preview6.19307.2. Therefore, we will run the following command in the package manager console of our application.
Install-Package Microsoft.AspNetCore.Authentication.Facebook -Version 3.0.0-preview6.19307.2
Configure the server-side Blazor app to use Facebook authentication
We need to store the App ID and App Secret field values in our application. We will use Secret Manager tool for this purpose. The Secret Manager tool is a project tool that can be used to store secrets such as password, API Key, etc. for a .NET Core project during the development process. With the Secret Manager tool, we can associate app secrets with a specific project and can share them across multiple projects.
Open our web application once again and Right-click the project in Solution Explorer and select "Manage User Secrets" from the context menu. A secrets.json file will open. Put the following code in it.
- {
- "Authentication:Facebook:AppId": "Your Facebook AppId",
- "Authentication:Facebook:AppSecret": "Your Facebook AppSecret"
- }
Now, open Startup.cs file and put the following code into ConfigureServices method.
- services.AddAuthentication().AddFacebook(facebookOptions =>
- {
- facebookOptions.AppId = Configuration["Authentication:Facebook:AppId"];
- facebookOptions.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
-
- facebookOptions.Events = new OAuthEvents()
- {
- OnRemoteFailure = loginFailureHandler =>
- {
- var authProperties = facebookOptions.StateDataFormat.Unprotect(loginFailureHandler.Request.Query["state"]);
- loginFailureHandler.Response.Redirect("/Identity/Account/Login");
- loginFailureHandler.HandleResponse();
- return Task.FromResult(0);
- }
- };
- });
This code will read the AppId and AppSecret from the secrets.json file. The AddFacebook() method is an extension method and it is used to configure the Facebook Authentication options for our application. We are also handling the event of OnRemoteFailure in this code section. Hence, if the user denies access to his Facebook account, then he will be redirected back to the Login page of our Blazor application.
Adding authorization to Blazor pages
Blazor has added a new built-in component called AuthorizeView, which is used to display different content based on the authentication state of the application. This component will display the child component only when the user is authorized. The AuthorizeView component is configured in "\Shared\LoginDisplay.razor" file.
To implement authorization to a specific page, we need to use the [Authorize] attribute. Blazor has introduced a new directive @attribute, which is used to include the [Authorize] attribute for a page. In this application, we will apply [Authorize] to the FetchData component. This will prohibit unauthorized access to this component. Open FetchData.razor page and add the following lines at the top of the page.
- @using Microsoft.AspNetCore.Authorization
- @attribute [Authorize]
Execution Demo
Launch the application. Navigate to Fetch Data component by clicking on the “Fetch data” link on the menu on the left. You will see a “Not authorized” message displayed on the screen. Click “Log In” on the menu at the top. In the next page click on the “Facebook” button to login with Facebook. On the next page, you will be asked to provide the login credentials of your Facebook account. Put the details and click Log In. Once you are logged in successfully, you will be able to access the Fetch Data component. If you do not want to login then click on “Not now”. You will be redirected back to the Login page of Blazor app.
Refer to the GIF below for a better understanding.
Once you are logged in successfully into our Blazor app using Facebook, you will be also logged in to https://www.facebook.com/. This will create a set of browser cookie for https://www.facebook.com/. Therefore, the Blazor app will not ask for Facebook credentials when you try to login again. If you log out from Facebook then you have to enter credentials while logging into Blazor app.
Conclusion
We learned how to implement Facebook authentication and authorization in a server-side Blazor application. We have created and configured a Facebook app to implement Facebook authentication. To implement authorization for a specific component in Blazor, we have used the [Authorize] attribute. We have used Microsoft.AspNetCore.Authentication.Facebook NuGet package to configure the middleware for Facebook authentication.
Please get the source code from
GitHub and play around to get a better understanding. You can also read my other articles on
my blog.