Section 3 of 6

Claims-Based Authorization

🎯 What You'll Learn

  • What are claims
  • Adding claims to users
  • RequireClaim policy
  • Checking claims in code
  • Claims vs roles

What are Claims?

Claims are key-value pairs that describe the user (name, email, department, etc.). They provide more granular authorization than roles.

Adding Claims to Users

Add Claims C#
var claims = new List<Claim>
{
    new Claim("Department", "IT"),
    new Claim("EmployeeNumber", "12345"),
    new Claim("CanEditProducts", "true")
};

await _userManager.AddClaimsAsync(user, claims);

RequireClaim Policy

Program.cs C#
builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("ITDepartment", policy =>
        policy.RequireClaim("Department", "IT"));

    options.AddPolicy("CanEditProducts", policy =>
        policy.RequireClaim("CanEditProducts", "true"));
});

Using Claim Policies

[Authorize(Policy)] C#
[Authorize(Policy = "ITDepartment")]
public IActionResult ITDashboard()
{
    return View();
}

[Authorize(Policy = "CanEditProducts")]
public IActionResult EditProduct()
{
    return View();
}

Checking Claims in Code

Check Claim C#
if (User.HasClaim("Department", "IT"))
{
    // IT department logic
}

// Get claim value
var department = User.FindFirst("Department")?.Value;

Claims vs Roles

Aspect Roles Claims
Granularity Coarse (Admin, User) Fine-grained (Department, CanEdit)
Flexibility Limited Highly flexible
Use Case General permissions Specific attributes/permissions
Example Admin, Manager Department=IT, CanEditProducts=true

Key Takeaways

  • Claims: Key-value pairs describing user
  • AddClaimsAsync(): Add claims to user
  • RequireClaim(): Create claim-based policy
  • [Authorize(Policy)]: Apply claim policy
  • User.HasClaim(): Check claim in code
  • More granular: Than role-based authorization