How to fix 'Authorization in ASP.NET Core' with 401 Unauthorized

By FoxLearn 9/10/2024 8:33:13 AM   361
Getting a 401 Unauthorized error when using the [Authorize] attribute in ASP.NET Core generally indicates that there is an issue with the authentication or authorization setup.

Fixing authorization issues in ASP.NET Core can involve several steps. Here's a generalized approach to tackle the 401 Unauthorized error.

Make sure that you have properly configured authentication middleware in your Startup.cs file. This typically involves adding authentication services in the ConfigureServices method and setting up authentication middleware in the Configure method.

// ConfigureServices method
services.AddAuthentication(options =>
{
    options.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
    options.DefaultChallengeScheme = JwtBearerDefaults.AuthenticationScheme;
}).AddJwtBearer(options =>
{
    options.TokenValidationParameters = new TokenValidationParameters
    {
        ValidateIssuer = true,
        ValidateAudience = true,
        ValidateLifetime = true,
        ValidateIssuerSigningKey = true,
        ValidIssuer = Configuration["Jwt:Issuer"],
        ValidAudience = Configuration["Jwt:Issuer"],
        IssuerSigningKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(Configuration["Jwt:Key"]))
    };
});

// Configure method
app.UseAuthentication();
app.UseAuthorization();

You should configure your middleware must be in the correct order for the ASP.NET Framework properly inject the identity context to http request in the StartUp.Configure as shown below.

app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

Ensure that your controllers or actions are decorated with the appropriate authorization attributes, such as [Authorize] or [AllowAnonymous], depending on your requirements.

[Authorize]
public class MyController : ControllerBase
{
    // Your actions
}

If your API is accessed from a different origin, ensure that CORS (Cross-Origin Resource Sharing) is configured correctly to allow requests from the client application's domain.

I hope so you can fix 'ASP.NET Core JWT authentication always throwing 401 unauthorized' when sending request from postman.

Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...