.NET中的身份认证(Authentication)与授权(Authorization)是什么?如何使用Identity框架?

月夜之吻
发布: 2025-11-16 14:56:02
原创
740人浏览过
身份认证确认用户身份,授权控制资源访问。.NET通过ASP.NET Core Identity实现用户管理,支持多种认证方式和基于角色、策略的授权,结合中间件和特性配置,可快速构建安全应用。

.net中的身份认证(authentication)与授权(authorization)是什么?如何使用identity框架?

.NET中的身份认证(Authentication)和授权(Authorization)是构建安全应用的两个核心机制。身份认证确认用户是谁,授权决定已认证的用户能访问哪些资源或执行哪些操作。在实际开发中,这两个过程通常配合使用,确保只有合法用户在权限范围内进行操作。

身份认证与授权的基本概念

身份认证(Authentication) 是验证用户身份的过程。比如用户输入用户名和密码,系统检查是否匹配,若匹配则认为该用户身份合法。.NET支持多种认证方式,如Cookie认证、JWT Bearer认证、第三方登录(Google、Facebook等)。

授权(Authorization) 发生在认证之后,用于控制用户可以访问的资源。例如,管理员可以删除数据,普通用户只能查看。.NET通过角色(Role)、策略(Policy)等方式实现精细的权限控制。

使用ASP.NET Core Identity框架

Identity 是 ASP.NET Core 提供的一套完整的用户管理框架,内置了用户注册、登录、密码管理、角色管理等功能,适合大多数Web应用的需求。

1. 添加Identity到项目
创建一个新的 ASP.NET Core Web 应用,在创建时选择“Individual Account”(单独用户账户),Visual Studio 会自动配置 Identity。或者手动添加:

dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
登录后复制

然后在 Program.cs 中注册服务:

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));

builder.Services.AddIdentity<IdentityUser, IdentityRole>()
    .AddEntityFrameworkStores<ApplicationDbContext>()
    .AddDefaultTokenProviders();

var app = builder.Build();

// 启用认证和授权中间件
app.UseAuthentication();
app.UseAuthorization();
登录后复制

2. 配置数据库上下文
创建一个继承自 IdentityDbContext 的类:

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
    {
    }
}
登录后复制

使用 EF Core 迁移生成数据库表:

Blackink AI纹身生成
Blackink AI纹身生成

创建类似纹身的设计,生成独特纹身

Blackink AI纹身生成 17
查看详情 Blackink AI纹身生成
dotnet ef migrations add CreateIdentitySchema
dotnet ef database update
登录后复制

3. 使用内置页面或API进行登录/注册
Identity 支持 Razor Pages UI。可通过脚手架添加登录、注册页面:

  • 右键项目 → “添加” → “新搭建基架项”
  • 选择“Identity”,添加 Login、Register 等页面

也可以通过控制器实现 API 登录:

[ApiController]
[Route("[controller]")]
public class AccountController : ControllerBase
{
    private readonly SignInManager<IdentityUser> _signInManager;

    public AccountController(SignInManager<IdentityUser> signInManager)
    {
        _signInManager = signInManager;
    }

    [HttpPost("login")]
    public async Task<IActionResult> Login(LoginModel model)
    {
        var result = await _signInManager.PasswordSignInAsync(
            model.Username, model.Password, false, false);

        if (result.Succeeded)
        {
            return Ok("登录成功");
        }

        return Unauthorized();
    }
}
登录后复制

实现授权控制

在控制器或 Razor 页面上使用特性来限制访问:

[Authorize] // 要求用户已登录
public class SecureController : Controller
{
    [Authorize(Roles = "Admin")]
    public IActionResult DeleteUser()
    {
        return View();
    }

    [Authorize(Policy = "MustBeOver18")]
    public IActionResult AdultContent()
    {
        return View();
    }
}
登录后复制

自定义授权策略
Program.cs 中定义策略:

builder.Services.AddAuthorization(options =>
{
    options.AddPolicy("MustBeOver18", policy =>
        policy.RequireClaim("age", "18", "21", "25"));
});
登录后复制

或基于更复杂的逻辑使用 IAuthorizationHandler

基本上就这些。Identity 框架简化了用户管理,结合认证与授权机制,能快速构建安全的 .NET 应用。不复杂但容易忽略细节,比如中间件顺序和策略配置。

以上就是.NET中的身份认证(Authentication)与授权(Authorization)是什么?如何使用Identity框架?的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号