The latest preview for .NET Core 3 (preview-6) has introduced the functionality to add authentication and authorization in a server-side Blazor application. In this article, we will learn how to implement authentication and authorization using Google in a server-side Blazor application. You can refer to my previous article Understanding Server-side Blazor to get in-depth knowledge on server-side Blazor.
The source code has been updated to .NET Core 3.2 Preview-1. Get the source code from GitHub
To create a server-side Blazor app, open Visual Studio 2019 and follow the steps mentioned below.
BlazorGoogleAuth
and click Create. Create
button to create the application. These steps are shown in the GIF image below.
Before running the application, we need to apply migrations to our app. Navigate to Tools >> NuGet Package Manager >> Package Manager Console.
It will open the Package Manager Console. Put in Update-Database
command and hit enter. This will update the database using Entity Framework Code First Migrations.
Open project properties by right clicking on the project in solution explorer and select properties. Select Debug from left side menu then scroll to the bottom of the page. Note the SSL enabled URL. In this case, the URL is https://localhost:44327/
. We need this URL to configure the Google API Console project which we will be doing in our next section. Refer to the image below:
We need to create a Google API console project and obtain a client ID and client secret to configure the Google authentication in our application.
Navigate to https://developers.google.com/identity/sign-in/web/sign-in#before_you_begin. Login with your Google account. Follow the steps mentioned below.
/signin-google
appended to it. For this tutorial, the URL will be https://localhost:44327/signin-google
.ClientId
and ClientSecret
field. We will need these values to configure Google authentication in our web app Refer to the GIF below for a better understanding.
Important Note
- Do not use the word “Google” in your product name. You will be prompted with an error and you will not be allowed to create the app. This means “BlazorGoogleAuth” is an invalid project name.
- Project names must be between 4 and 30 characters and may only contain letters, numbers, spaces, and hyphens.
To configure the ASP.NET Core middleware for Google authentication we need to install the Microsoft.AspNetCore.Authentication.Google
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.Google/. 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.Google -Version 3.0.0-preview6.19307.2
Refer to the image below:
We need to store ClientId
and ClientSecret
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 the Solution Explorer. Select Manage User Secrets from the context menu. A secrets.json
file will open. Put the following code in it.
{ "Authentication:Google:ClientId": "Your Google ClientId here", "Authentication:Google:ClientSecret": "Your Google ClientSecret here" }
Now open Startup.cs
file and put the following code into ConfigureServices
method.
services.AddAuthentication().AddGoogle(googleOptions => { googleOptions.ClientId = Configuration["Authentication:Google:ClientId"]; googleOptions.ClientSecret = Configuration["Authentication:Google:ClientSecret"]; });
This code will read the ClientId
and ClientSecret
from the secrets.json
file. The AddGoogle()
method is an extension method and it is used to configure the Google Authentication options for our application.
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]
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 “Google” button to login with Google. Once you are logged in successfully, you will be able to access the Fetch Data component.
Refer to the GIF below for a better understanding.
We learned how to implement Google authentication and authorization in a server-side Blazor application. We have created and configured a Google API console project to implement Google authentication. To implement authorization for a specific component in Blazor, we have used the [Authorize] attribute. We have used Microsoft.AspNetCore.Authentication.Google
nuget package to configure the middleware for Google authentication.
Please get the source code from GitHub and play around to get a better understanding.
Get my book Blazor Quick Start Guide to learn more about Blazor.
Preparing for interviews !!! Read my article on C# Coding Questions For Technical Interviews
Introduction Blazor is a .NET web framework that allows us to create client-side applications using…
Introduction In this article, we are going to create a sudoku solver with the help…
Introduction In this article, we will learn how to implement Azure serverless with Blazor web…
Introduction Angular is an open-source framework that allows us to create applications for multiple platforms…
Introduction In this article, we will create an optical character recognition (OCR) application using Angular…
Introduction In this article, we will create an optical character recognition (OCR) application using Blazor…
View Comments
Thanks for this excellent article.
Hi,
Nice article. would you plz tell me that how you add that Google button on login page?
best regard
Ankit,
You have one of the best guides for server side google authentication in .net core. Please add a section for client WASM apps. I've just gotten it working and I can send you my notes.
Greg
Hey Ankit,
was searching google authorization on the server-side for the blazer app and it was the best tutorial I have come across. Would love to read more article like implement authorization for a specific component in Blazor?
Thanks for reading my article. I am glad my work is useful for you. Keep reading. Keep sharing.