ZetCode

ASP.NET 用户

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 ASP.NET 8 中的 User 属性。此属性提供对 Web 应用程序中当前用户身份和声明的访问。

ASP.NET 是一个跨平台、高性能的框架,用于构建现代 Web 应用程序。User 属性对于身份验证和授权至关重要。

基本定义

ASP.NET 中的 User 属性表示当前 HTTP 请求的安全上下文。它在控制器、Razor Pages 和中间件组件中可用。

User 提供有关已验证用户的信息,包括他们的身份、角色和声明。它实现了 System.Security 中的 ClaimsPrincipal 类。

此属性由 ASP.NET 的身份验证中间件自动填充。它通常与 Identity、JWT 或其他身份验证方案一起使用。

ASP.NET 用户示例

以下示例演示了如何在控制器中使用 User 属性。

Program.cs
var builder = WebApplication.CreateBuilder(args);

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

builder.Services.AddControllers();

var app = builder.Build();

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

app.MapControllers();
app.Run();

这将在 ASP.NET 应用程序中设置 JWT bearer 身份验证。身份验证中间件会为授权的请求填充 User 属性。

Controllers/UserController.cs
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;

[ApiController]
[Route("api/[controller]")]
[Authorize]
public class UserController : ControllerBase
{
    [HttpGet("profile")]
    public IActionResult GetUserProfile()
    {
        var userName = User.Identity?.Name;
        var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
        var email = User.FindFirstValue(ClaimTypes.Email);
        
        return Ok(new {
            UserName = userName,
            UserId = userId,
            Email = email
        });
    }

    [HttpGet("roles")]
    public IActionResult GetUserRoles()
    {
        var roles = User.Claims
            .Where(c => c.Type == ClaimTypes.Role)
            .Select(c => c.Value);
            
        return Ok(roles);
    }

    [HttpGet("admin")]
    [Authorize(Roles = "Admin")]
    public IActionResult AdminEndpoint()
    {
        return Ok("Welcome Admin!");
    }
}

此控制器演示了使用 User 属性的三种不同方法。第一种方法从声明中检索基本用户配置文件信息。

第二种方法从 User 属性中提取所有角色声明。第三种方法使用 Authorize 属性展示基于角色的授权。

控制器级别的 Authorize 属性要求所有操作都进行身份验证。Roles 参数将访问限制为特定的用户角色。

该示例展示了 User 如何通过声明访问身份信息。声明是代表用户属性的键值对。

来源

Microsoft ASP.NET 安全文档

在本文中,我们探讨了 ASP.NET 8 中的 User 属性。此重要功能实现了安全的用户身份验证和授权。

作者

我叫 Jan Bodnar,是一名充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在教授编程方面拥有十多年的经验。

列出所有 ASP.NET 教程