Minimal APIs in ASP.NET Core allow us to build lightweight APIs with minimal dependencies. However, often we will still need authentication and authorization in our minimal APIs. There are several ways to achieve this in ASP.NET Core including basic authentication, token-based authentication, and identity-based authentication.We discussed implementing basic authentication in minimal APIs here, and JWT token-based authentication in minimal APIs here. In this article we’ll examine how we can implement identity-based authentication for minimal APIs in ASP.NET Core.To use the code examples provided in this article, you should have Visual Studio 2022 installed in your system. If you don’t already have a copy, you can download Visual Studio 2022 here.Create an ASP.NET Core Web API project in Visual Studio 2022To create an ASP.NET Core Web API project in Visual Studio 2022, follow the steps outlined below.
Launch the Visual Studio 2022 IDE.
Click on “Create new project.”
In the “Create new project” window, select “ASP.NET Core Web API” from the list of templates displayed.
Click Next.
In the “Configure your new project” window, specify the name and location for the new project. Optionally check the “Place solution and project in the same directory” check box, depending on your preferences.
Click Next.
In the “Additional Information” window shown next, select “.NET 8.0 (Long Term Support)” as the framework version and uncheck the check box that says “Use controllers,” as we’ll be using minimal APIs in this project.
Elsewhere in the “Additional Information” window, leave the “Authentication Type” set to “None” (the default) and make sure the check boxes “Enable Open API Support,” “Configure for HTTPS,” and “Enable Docker” remain unchecked. We won’t be using any of those features here.
Click Create.
We’ll use this ASP.NET Core Web API project to work with the code examples given in the sections below.Identity management in ASP.NET CoreASP.NET Core includes a powerful feature known as identity management that has been enhanced in .NET 8. The built-in Identity framework in ASP.NET Core provides the necessary middleware to implement authentication, user management, and role-based authorization, thereby making it simpler to implement robust and secure authentication mechanisms in your application. ASP.NET Core’s Identity framework is extensible and customizable with support for the following key features:
Authentication and authorization
User management
Roles management
Password hashing
Token-based authentication
Claims-based authentication
Create a minimal API in ASP.NET CoreIn the Web API project we created above, replace the generated code with the following code to create a basic minimal API. var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet(“/helloworld”, () => “Hello, World!”);
app.Run();When you execute the application, the text “Hello World!” will be displayed in your web browser. We’ll use this endpoint later in this article.Install NuGet packagesTo add support for the built-in Identity framework in ASP.NET Core, select the project in the Solution Explorer window, then right-click and select “Manage NuGet Packages.” In the NuGet Package Manager window, search for the Microsoft.AspNetCore.Identity.EntityFrameworkCore, Microsoft.EntityFrameworkCore.SqlServer, and Microsoft.EntityFrameworkCore.Design packages and install them.Alternatively, you can install the packages via the NuGet Package Manager console by entering the commands listed below.PM> Install-Package Microsoft.AspNetCore.Identity.EntityFrameworkCore
PM> Install-Package Microsoft.EntityFrameworkCore.SqlServer
PM> Install-Package Microsoft.EntityFrameworkCore.DesignCreate a new DbContext in EF CoreWe’ll be using Entity Framework Core in this example. The DbContext is an integral component of EF Core that represents a connection session with the database. Next, create a custom DbContext class by extending the IdentityDbContext class as shown in the code snippet given below. public class CustomDbContext(DbContextOptions options)
: IdentityDbContext(options){ } You should register the custom DbContext class by including the following line of code in the Program.cs file.builder.Services.AddDbContext();Enable authentication and authorization in ASP.NET CoreAuthentication is the process of determining who the user is and validating the user’s identity. You can enable authentication in a minimal API in ASP.NET Core by using the AddAuthentication() method as shown in the code snippet given below.var builder = WebApplication.CreateBuilder(args);
builder.Services.AddAuthentication();We use authorization to restrict access to certain resources in an application. You can enable authorization in your minimal API by using the following code.builder.Services.AddAuthorization();The AddAuthorization method is used to register authorization services with the services container so that you can define rules for enabling or disabling access to resources of the application if needed. Configure services and API endpoints in ASP.NET CoreThe next thing we need to do is configure the identity and EF Core services and the API endpoints. To do this, include the code listing given below in the Program.cs file.using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
builder.Services.AddDbContext();
builder.Services.AddAuthorization();
builder.Services.AddIdentityApiEndpoints()
.AddEntityFrameworkStores();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.MapIdentityApi();The AddIdentityApiEndpoints() method in the preceding code snippet adds the necessary controllers and services for authentication and authorization (login, logout, registration, etc.). Note that this is a new method (introduced in .NET 8) used to configure Identity integration in an application. The AddIdentityApiEndpoints() method accepts an instance of type IdentityUser as a parameter, which is used to specify the type of user.You can use the following piece of code to add authorization for the /helloworld endpoint.app.MapGet(“/helloworld”, () => “Hello World!”)
.RequireAuthorization();Complete source of the Program.cs fileThe complete source code of the Program.cs file is given below for your reference.using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddDbContext();
builder.Services.AddAuthorization();
builder.Services.AddIdentityApiEndpoints()
.AddEntityFrameworkStores();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();
var app = builder.Build();
app.MapIdentityApi();
// Configure the HTTP request pipeline.
app.MapGet(“/helloworld”, () => “Hello World!”)
.RequireAuthorization();
app.UseSwagger();
app.UseSwaggerUI(c =>
{
c.SwaggerEndpoint(“/swagger/v1/swagger.json”, “v1”);
});
app.Run();
public class CustomDbContext(DbContextOptions options)
: IdentityDbContext(options)
{
protected override void OnConfiguring(DbContextOptionsBuilder options) =>
options.UseSqlite(“DataSource = DemoDb; Cache=Shared”);
}The integrated identity management feature in ASP.NET Core is both powerful and easy to use. The improvements in .NET 8 have made Identity even more robust and flexible with an improved Identity API, which enables you to implement identity-based authentication and authorization more easily and efficiently with less code.
Copyright © 2024 IDG Communications, Inc.
Source link