当前位置: 首页 > news >正文

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

在 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 则用户在浏览器关闭后仍然保持登录状态};// 执行身份验证并设置 Cookieawait 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] 特性来保护需要授权的页面。

相关文章:

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

在 ASP.NET Core 中使用 Cookie 身份验证&#xff0c;通常是为了实现用户的登录和授权。以下是配置 Cookie 身份验证的步骤。 1. 安装必要的 NuGet 包 首先&#xff0c;确保项目中包含 Microsoft.AspNetCore.Authentication.Cookies 包。你可以通过 NuGet 包管理器或命令行安…...

Ollama私有化部署大语言模型LLM

目录 一、Ollama介绍 二、安装Ollama 1、标准安装 2、国内加速 三、升级Ollama版本 四、使用Ollama 1、启动ollama服务 systemctl start ollama.service ollama serve 2、使用ollama命令 ollama run 运行模型 ollama ps 查看正在运行的模型 ollama list 查看(本地)…...

安卓app抓包总结(精)

前言 这里简单记录一下相关抓包工具证书的安装 burp证书安装 安装证书到移动设备(安卓7以后必须上传到设备系统根证书上) 导出证书 openssl x509 -inform DER -in cacert.der -out cacert.pem 转换格式 openssl x509 -inform PEM -subject_hash_old -in cacert.pem …...

Three.js 性能优化:打造流畅高效的3D应用

文章目录 前言一、减少几何体复杂度&#xff08;Reduce Geometry Complexity&#xff09;二、合并几何体&#xff08;Merge Geometries&#xff09;三、使用缓冲区几何体&#xff08;Use BufferGeometries&#xff09;四、纹理压缩与管理&#xff08;Texture Compression and M…...

PHP 在 2025 年的现状与展望

PHP 在 2025 年依然强劲&#xff0c;继续为超过 77% 使用已知服务器端编程语言的网站提供动力。这并非仅仅依靠遗留代码&#xff0c;像 WordPress、Shopify 和 Laravel 这样的主流平台持续推动 PHP 的发展&#xff0c;使其保持着 актуальность 并不断进化。 为什么…...

力扣经典二分题:4. 寻找两个正序数组的中位数

题目链接&#xff1a;4. 寻找两个正序数组的中位数 - 力扣&#xff08;LeetCode&#xff09; 一、题目分析 这道题目是让我们在 两个正序的数组中寻找中位数已知两个数组的大小分别是&#xff1a;int m nums1.size(),n nums2.size();中位数性质1&#xff1a;中位数左侧元素 …...

解决WordPress出现Fatal error: Uncaught TypeError: ftp_nlist()致命问题

错误背景 WordPress版本&#xff1a;wordpress-6.6.2-zh_CN WooCommerce版本&#xff1a;woocommerce.9.5.1 WordPress在安装了WooCommerce插件后&#xff0c;安装的过程中没有问题&#xff0c;在安装完成后提示&#xff1a; 此站点遇到了致命错误&#xff0c;请查看您站点管理…...

Excel 技巧07 - 如何计算到两个日期之间的工作日数?(★)如何排除节假日计算两个日期之间的工作日数?

本文讲了如何在Excel中计算两个日期之间的工作日数&#xff0c;以及如何排除节假日计算两个日期之间的工作日数。 1&#xff0c;如何计算到两个日期之间的工作日数&#xff1f; 其实就是利用 NETWORKDAYS.INTL 函数 - weekend: 1 - 星期六&#xff0c;星期日 2&#xff0c;如…...

快速实现一个快递物流管理系统:实时更新与状态追踪

物流管理是电商、仓储和配送等行业的重要组成部分。随着电子商务的快速发展&#xff0c;快递物流的高效管理和实时状态更新变得尤为关键。本文将演示如何使用Node.js、Express、MongoDB等技术快速构建一个简单的快递物流管理系统&#xff0c;该系统支持快递订单的实时更新和追踪…...

kvm 解决 安装windows 虚拟机cpu 核数问题

通过lscpu命令查到我本机的cpu信息如下 CPU(s): 12 —— 系统的总逻辑处理单元数量&#xff08;包括所有核心和逻辑处理器&#xff09;。Thread(s) per core: 2 —— 每个物理核心支持 2 个线程&#xff08;表示启用了超线程技术&#xff09;。Core(s) per socket: 6 —— 每个…...

Ansys Fluent Aeroacoustics 应用

探索 Ansys Fluent 在气动声学领域的前沿功能&#xff0c;彻底改变各行各业解决降噪和提高音质的方式。 了解气动声学 气动声学是声学的一个分支&#xff0c;它处理湍流流体运动产生的噪声以及这些声音通过流体介质&#xff08;如空气&#xff09;的传播。这个领域在工程中至…...

119.使用AI Agent解决问题:Jenkins build Pipeline时,提示npm ERR! errno FETCH_ERROR

目录 1.Jenkins Build时的错误 2.百度文心快码AI智能体帮我解决 提问1&#xff1a;jenkins中如何配置npm的源 提问2&#xff1a;jenkins pipeline 类型为pipeline script from SCM时&#xff0c;如何配置npm源 3.最终解决方法-Jenkinsfile的修改 4.感触 1.Jenkins Build时…...

istio-proxy内存指标

在 Istio 环境中&#xff0c;istio-proxy 是 Envoy 的边车代理容器。通过运行命令 curl localhost:15000/memory&#xff0c;或者curl localhost:15000/stats 可以查询 Envoy 的内存统计信息。以下是典型返回结果的结构和意义&#xff1a; 返回结果单位是bytes&#xff0c;需/…...

List详解 - 双向链表的操作

在C中&#xff0c;std::list是标准模板库&#xff08;STL&#xff09;中的一个容器&#xff0c;它实现了双向链表的数据结构。与数组或向量&#xff08;std::vector&#xff09;不同&#xff0c;std::list允许在常数时间内进行插入和删除操作&#xff0c;尤其是在链表的任意位置…...

多目标优化算法之一:基于分解的方法

在多目标优化算法中,“基于分解的方法”通常指的是将多目标优化问题(MOP)分解为多个单目标优化子问题,并同时优化这些子问题。这种方法的核心思想是通过引入权重向量或参考点,将多目标问题转化为多个标量优化问题,每个子问题都关注于原始问题的一个特定方面或视角。这样可…...

conntrack iptables 安全组

centos 安装yum install conntrack-tools 1. conntrack状态 NEW: 新建连接&#xff08;第一次包&#xff09;。 ESTABLISHED: 已建立连接&#xff0c;正在传输数据。 RELATED: 与已有连接相关的连接&#xff0c;如 FTP 数据连接。 INVALID: 无效连接&#xff0c;无法识别或不…...

stringRedisTemplate.execute执行lua脚本

stringRedisTemplate.execute执行lua脚本 1. 引入必要依赖 确保项目中已经引入了Spring Data Redis相关依赖&#xff0c;例如在 Maven 项目中&#xff0c;一般会有如下依赖&#xff08;版本号根据实际情况调整&#xff09;&#xff1a; <dependency><groupId>or…...

HDFS异构存储和存储策略

一、HDFS异构存储类型 1.1 冷、热、温、冻数据 通常&#xff0c;公司或者组织总是有相当多的历史数据占用昂贵的存储空间。典型的数据使用模式是新传入的数据被应用程序大量使用&#xff0c;从而该数据被标记为"热"数据。随着时间的推移&#xff0c;存储的数据每周…...

生成idea ui风格界面代码

创建一个类似 IntelliJ IDEA 的用户界面&#xff08;UI&#xff09;涉及多个组件和复杂的布局设计。为了简化这个过程&#xff0c;我们可以使用 **Java Swing** 或 **JavaFX** 来实现一个基本的 IDE 界面&#xff0c;模仿 IntelliJ IDEA 的主要布局元素&#xff0c;如菜单栏、工…...

嵌入式C语言:二维数组

目录 一、二维数组的定义 二、内存布局 2.1. 内存布局特点 2.2. 内存布局示例 2.2.1. 数组元素地址 2.2.2. 内存布局图&#xff08;简化表示&#xff09; 2.3. 初始化对内存布局的影响 三、访问二维数组元素 3.1. 常规下标访问方式 3.2. 通过指针访问 3.2.1. 指向数…...

【机器学习:四、多输入变量的回归问题】

多输入变量的回归问题 1. 多元线性回归概述 1.1 单变量线性回归与多变量线性回归的概念区分 单变量线性回归&#xff1a;用于预测一个因变量&#xff08;输出变量&#xff09;与单一自变量&#xff08;输入变量&#xff09;之间的线性关系。模型形式为&#xff1a; y θ 0 …...

JVM实战—OOM的定位和解决

1.如何对系统的OOM异常进行监控和报警 (1)最佳的解决方案 最佳的OOM监控方案就是&#xff1a;建立一套监控平台&#xff0c;比如搭建Zabbix、Open-Falcon之类的监控平台。如果有监控平台&#xff0c;就可以接入系统异常的监控和报警&#xff0c;可以设置当系统出现OOM异常&…...

iOS 本地新项目上传git仓库,并使用sourceTree管理

此文记录的场景描述&#xff1a; iOS前期开发时&#xff0c;在本地创建项目&#xff0c;直至开发一段时间&#xff0c;初期编码及框架已完善后&#xff0c;才拿到git仓库的地址。此时需要将本地代码上传到git仓库。 上传至git仓库&#xff0c;可以使用终端&#xff0c;键入命令…...

mysql之基本select语句 运算符 排序分页

1.SQL的分类 DDL:数据定义语言. CREATE ALTER DROP RENAME TRUNCATE DML: 数据操作语言. INSERT DELETE UPDATE SELECT 重中之重 DCL: 数据控制语言. COMMIT ROLLBACK SAVEPOINT GRANT REVOKE 2.SQL语言的规则与规范 1.基本规则 SQL可以在一行或多行,为了提高可…...

如何在 Ubuntu 22.04 上安装 Nagios 服务器教程

简介 在本教程中&#xff0c;我们将解释如何在 Ubuntu 22.04 上安装和配置 Nagios&#xff0c;使用 Apache 作为 Web 服务器&#xff0c;并通过 Let’s Encrypt Certbot 使用 SSL 证书进行保护。 Nagios 是一个强大的监控系统&#xff0c;它可以帮助组织在 IT 基础设施问题影…...

数据库事务:确保数据一致性的关键机制

1. 什么是数据库事务 定义&#xff1a;事务&#xff08;Transaction&#xff09;是数据库管理系统中的一个逻辑工作单元&#xff0c;用于确保一组相关操作要么全部成功执行&#xff0c;要么全部不执行&#xff0c;从而维护数据的一致性和完整性。重要性&#xff1a;在多用户环…...

词作词汇积累:错付、大而无当、语焉不详、愈演愈烈

错付 1、基本介绍 【错付】是错误地付出或投入&#xff0c;特别是在感情、信任或资源方面。 【错付】代表投入的东西没有得到应有的回报&#xff0c;或者投入的对象并不值得。 2、实例实操 1. 她将所有的爱与关怀都【错付】给了那个不懂珍惜的人。2. 多年的努力似乎【错付…...

selenium学习笔记

一.搭建环境 1.安装chrome #下载chrome wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb#安装chrome apt --fix-broken install ./google-chrome-stable_current_amd64.deb2.安装chromedriver 首先先查看版本&#xff1a;google-chrome --…...

asp.net core webapi 并发请求时 怎么保证实时获取的用户信息是此次请求的?

对于并发请求&#xff0c;每个请求会被分配到一个独立的线程或线程池工作线程上。通过 HttpContext 或 AsyncLocal&#xff0c;每个线程都能独立地获取到它自己的上下文数据。由于这些数据是与当前请求相关的&#xff0c;因此在并发请求时不会互相干扰。 在并发请求时&#xf…...

实时数仓:基于数据湖的实时数仓与数据治理架构

设计一个基于数据湖的实时数仓与数据治理架构&#xff0c;需要围绕以下几个核心方面展开&#xff1a;实时数据处理、数据存储与管理、数据质量治理、数据权限管理以及数据消费。以下是一个参考架构方案&#xff1a; 一、架构整体概览 核心组成部分 数据源层 数据来源&#xff…...

做公众号链接的网站/百度收录比较好的网站

Dreamweaver CC 2019 for mac是Web设计人员和开发人员设计必备的软件&#xff0c;dw 2019 mac破解版支持HTML、CSS、JavaScript等&#xff0c;功能十分强大&#xff0c;可以轻松帮助用户设计精美的网站网页&#xff0c;这次Dreamweaver cc 2019 mac破解版主要针对安全性增强功能…...

上海注册设计公司网站/软文推广代理

计算机网络复习题概述选择题在如下网络拓朴结构中&#xff0c;具有一定集中控制功能的网络是( )。 A&#xff0e;总线型网络  B&#xff0e;星型网络  C&#xff0e;环形网络  D&#xff0e;全连接型网络ISO/OSI( )。 A.开放系统互连参考模型 B.TCP/IP协议 C.网络软件 D.…...

网站文章添加/网络推广吧

java小游戏-java小游戏-超级玛丽1 创建窗口2 创建并完成常量类3 创建背景类4 绘制背景类5 创建障碍物6 第一关的设计7 第二关的设计8 第三关的设计9 创建马里奥类10 实现马里奥的移动11 实现马里奥的跳跃和下落12 实现障碍物的阻挡13 实现游戏结束14 创建并完成敌人类15 向关卡…...

果洛营销网站建设哪家好/企业网站seo托管怎么做

防火墙的作用&#xff1a;它是一种位于内部网络与外部网络之间的网络安全系统。一项信息安全的防护系统&#xff0c;依照特定的规则&#xff0c;允许或是限制传输的数据通过&#xff0c;有纯软件的防火墙&#xff0c;最常见就是集成在系统内核当中的防火墙。还有企业常用的硬件…...

ppt做视频的模板下载网站有哪些/产品故事软文案例

cmd不是内部命令解决方法参考文章&#xff1a; &#xff08;1&#xff09;cmd不是内部命令解决方法 &#xff08;2&#xff09;https://www.cnblogs.com/wchu/p/6406150.html 备忘一下。...

app小程序/网络优化大师下载

在C里,通过继承和组合实现了代码复用,使得开发效率提高,并且能够通过代码看到事物的关系 组合比继承简单,所以在写代码时先考虑能否组合,再来考虑继承. 组合的特点 将其它类的对象作为当前类的成员使用比如主机类,拥有 CPU/主板/内存/硬盘这4个对象成员,而这4个对象成员并没有继…...