ASP.NET Core 中使用 Cookie 身份验证

news/2025/1/11 21:22:51 标签: asp.net, 后端

在 ASP.NET Core 中使用 Cookie 身份验证,通常是为了实现用户的登录和授权。以下是配置 Cookie 身份验证的步骤。

1. 安装必要的 NuGet 包

首先,确保项目中包含 Microsoft.AspNetCore.Authentication.Cookies 包。你可以通过 NuGet 包管理器或命令行安装它:

dotnet add package Microsoft.AspNetCore.Authentication.Cookies

2. 配置 Cookie 身份验证

在 ASP.NET Core 6 或更高版本中,配置通常发生在 Program.cs 中。以下是一个典型的配置过程:

在 Program.cs 中配置 Cookie 身份验证
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;

var builder = WebApplication.CreateBuilder(args);

// 添加身份验证服务
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
    .AddCookie(options =>
    {
        // 设置登录页面路由
        options.LoginPath = "/Account/Login"; // 登录路径
        options.LogoutPath = "/Account/Logout"; // 登出路径
        options.AccessDeniedPath = "/Account/AccessDenied"; // 访问被拒绝路径

        // 设置 Cookie 的过期时间
        options.SlidingExpiration = true; // 启用滑动过期
        options.ExpireTimeSpan = TimeSpan.FromMinutes(30); // 设置过期时间

        // 可选的其他设置
        // options.Cookie.Name = "YourAppAuthCookie"; // 自定义 Cookie 名称
      // options.Cookie.HttpOnly = true; // 禁止 JavaScript 访问 Cookie
    // options.Cookie.SecurePolicy = CookieSecurePolicy.Always; // 强制 HTTPS 使用 Cookie
    });

builder.Services.AddAuthorization(); // 添加授权服务

builder.Services.AddControllersWithViews(); // 添加 MVC 或 Razor Pages 支持

var app = builder.Build();

// 使用身份验证中间件
app.UseAuthentication(); // 必须在 UseAuthorization 之前

// 使用授权中间件
app.UseAuthorization();

app.MapDefaultControllerRoute(); // 设置默认路由

app.Run();

3. 实现登录逻辑

你需要创建一个控制器来处理登录逻辑,并设置用户的身份验证 cookie。

登录控制器
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Mvc;
using System.Security.Claims;
using System.Threading.Tasks;

publicclassAccountController : Controller
{
    // 登录页面
    [HttpGet]
    public IActionResult Login()
    {
        return View();
    }

    // 处理登录请求
    [HttpPost]
    public async Task<IActionResult> Login(string username, string password)
    {
        // 这里进行用户名和密码的验证,假设验证成功
        if (username == "admin" && password == "password") // 示例验证逻辑
        {
            // 创建用户的身份信息
            var claims = new List<Claim>
            {
                new Claim(ClaimTypes.Name, username),
                new Claim(ClaimTypes.Role, "Admin") // 添加角色信息
            };

            var claimsIdentity = new ClaimsIdentity(claims, CookieAuthenticationDefaults.AuthenticationScheme);
            var authProperties = new AuthenticationProperties
            {
                IsPersistent = true, // 设置为 true 则用户在浏览器关闭后仍然保持登录状态
            };

            // 执行身份验证并设置 Cookie
            await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, 
                new ClaimsPrincipal(claimsIdentity), authProperties);

            return RedirectToAction("Index", "Home"); // 登录成功后重定向到主页
        }

        ModelState.AddModelError(string.Empty, "Invalid login attempt.");
        return View();
    }

    // 登出逻辑
    [HttpPost]
    public async Task<IActionResult> Logout()
    {
        await HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme); // 清除身份验证信息
        return RedirectToAction("Login", "Account"); // 重定向到登录页面
    }
}

4. 创建登录页面视图

你还需要为登录页面创建一个简单的视图。例如,在 Views/Account/Login.cshtml 中:

@{
    ViewData["Title"] = "Login";
}

<h2>Login</h2>

<form method="post">
    <div>
        <label for="username">Username</label>
        <input type="text" id="username" name="username" required />
    </div>
    <div>
        <label for="password">Password</label>
        <input type="password" id="password" name="password" required />
    </div>
    <div>
        <button type="submit">Login</button>
    </div>
</form>

5. 授权和授权策略

为了限制某些页面只能被已登录用户访问,你可以在控制器或页面上使用 [Authorize] 特性。

示例:使用 [Authorize] 特性
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;

[Authorize] // 确保只有已登录的用户能访问
public class HomeController : Controller
{
    public IActionResult Index()
    {
        return View();
    }
}

6. 登录后的页面保护

你可以通过 Authorize 特性来保护需要用户登录才能访问的页面或操作。未登录用户将被重定向到登录页面。

总结

  • 在 Program.cs 中配置 Cookie 身份验证。

  • 使用 SignInAsync 来设置用户的身份验证 Cookie。

  • 使用 SignOutAsync 处理用户登出。

  • 通过 [Authorize] 特性来保护需要授权的页面。


http://www.niftyadmin.cn/n/5820205.html

相关文章

Apache AGE:基于PostgreSQL的图数据库深度解析

Apache AGE&#xff1a;基于PostgreSQL的图数据库深度解析 一、引言 在当今复杂多变的数据环境中&#xff0c;关系型数据库和图数据库各自扮演着重要的角色。关系型数据库以其结构清晰、查询高效的特点&#xff0c;在事务处理和数据一致性方面表现出色&#xff1b;而图数据库…

农业4.0背后的智慧引擎:机器学习助力精准农事决策

农业4.0背后的智慧引擎&#xff1a;机器学习助力精准农事决策 在21世纪的科技浪潮中&#xff0c;农业作为人类生存和发展的基石&#xff0c;正经历着前所未有的变革。从传统的农耕文明到现代化的机械农业&#xff0c;再到如今智能化的农业4.0时代&#xff0c;每一步都凝聚着科…

软件架构考试基础知识 002:进程的状态与其切换

进程状态转换的说明 在操作系统中&#xff0c;进程的状态表示其当前的执行情况和资源占用情况。进程状态的转换反映了操作系统如何管理和调度进程。以下是进程状态转换的说明&#xff1a; 1. 三态模型&#xff08;Three-state Model&#xff09; 三态模型是最基础的进程状态模…

Vue2与Vue3在项目开发中的选择:深入探讨

文章目录 前言一、Vue2的优势与挑战二、Vue3的进步与特性三、如何做出选择&#xff1f;结语 前言 Vue.js 是一个用于构建用户界面的渐进式JavaScript框架。Vue2和Vue3是其两个主要版本&#xff0c;它们各自拥有一系列特点和优势。随着Vue3的发布&#xff0c;开发者们面临着在新…

基于Ubuntu2404脚本搭建openstackC版-ovn网络驱动

openstack-C 配置基础环境iaas-install-mysql.shiaas-install-keystone.shiaas-install-glance.shiaas-install-placement.shiaas-install-nova-controller.shiaas-install-neutron-controller.shiaas-install-horizon.shiaas-install-nova-compute.shiaas-install-neutron-com…

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图) 前面的两篇博文简述了AutoSAR CP分层架构的概念&#xff0c;下面我们来具体到每一层的具体内容进行讲解&#xff0c;每一层的每一个功能块力求用一个总览图&#xff0c;外加一个例子的图给大家进…

免费下载 | 2024安全有效性验证能力白皮书

《2024安全有效性验证能力白皮书》是一份由北京知其安科技有限公司与北京数字世界咨询有限公司联合撰写的报告&#xff0c;旨在探讨和阐述安全有效性验证&#xff08;Cybersecurity Validation&#xff0c;CV&#xff09;的概念、市场现状、关键成功因素、与传统安全评估的差异…

《网络安全里的Linux基础:构建安全网络的关键基石》

linux openssl openssl passwd -1 123 openssl是一个开源的加密工具包&#xff0c;提供了各种加密、解密、签名、验证等功能。 password表示这个命令用于处理密码相关的操作。 -1参数指定使用MD5加密算法对密码“123”进行加密处理。MD5是一种常用的哈希算法&#xff0c;它…