Introduction
Have you ever wanted to add Azure AD authentication to a C# WebApi project for .NET 8?
Now you can.
The Code
First, let’s create a new WebAPI project:
dotnet new webapi --use-controllers
Next, add the required package:
dotnet add package Microsoft.AspNetCore.Authentication.JwtBearer
Next, we need to add the Azure AD settings in appsettings.json
:
"AzureAd": {
"Instance": "https://login.microsoftonline.com/",
"TenantId": "yyyy",
"ClientId": "xxxxx"
}
Replace yyyy
with the correct TenantId and xxxxx
with the correct Azure SPN Client Id.
Add the JWT authentication to program.cs similar to this:
builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
//.AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));
.AddJwtBearer(opt =>
{
opt.Authority = $"{builder.Configuration["AzureAd:Instance"]}{builder.Configuration["AzureAd:TenantId"]}";
opt.Audience = $"api://{builder.Configuration["AzureAd:ClientId"]}";
opt.IncludeErrorDetails = true;
});
Unfortunately, I could not get the AddMicrosoftIdentityWebApi
version of the code working.
In order to add Bearer authentication to Swagger, update the builder.Services.AddSwaggerGen()
with the following code:
builder.Services.AddSwaggerGen(opt =>
{
opt.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
{
In = ParameterLocation.Header,
Description = "Please enter token",
Name = "Authorization",
Type = SecuritySchemeType.Http,
BearerFormat = "JWT",
Scheme = "bearer"
});
opt.AddSecurityRequirement(new OpenApiSecurityRequirement
{
{
new OpenApiSecurityScheme
{
Reference = new OpenApiReference
{
Type=ReferenceType.SecurityScheme,
Id="Bearer"
}
},
new string[]{}
}
});
});
Finally, add [Authorize]
to your controllers.
Running it
If everything is ok, then run the WebAPI project using:
dotnet run
Next, get a Bearer token using Postman (or curl):
Now you can call the WebAPI service: