如何在 ASP.NET MVC 项目中使用身份验证器应用程序实现多因素身份验证?

介绍

增强安全性对于任何应用程序都至关重要,而多因素身份验证 (MFA) 是实现此目标的有效方法。在本文中,我们将介绍在 ASP.NET MVC 项目中使用身份验证器应用程序集成 MFA 的过程。无论您是从头开始还是将 MFA 添加到现有项目,本指南都将提供清晰的分步说明,以帮助您保护应用程序免受未经授权的访问。从设置项目到实现登录方法和生成二维码,我们将介绍创建强大身份验证系统所需的一切。

使用身份验证器应用程序实现多重身份验证的步骤

在这里,我将从头开始,如果你有一个项目,你可以跳过设置步骤。以下是在 ASP.NET MVC 项目中使用身份验证器应用程序实现多因素身份验证的步骤 -

步骤 1. 设置项目

  1. 在 Visual Studio 中,单击“创建新项目”,然后单击“下一步”。
  2. 在模板中选择“ASP.NET Core Web App(Model-View-Controller)”,然后单击“下一步”。
  3. 在“配置新项目”窗口中,命名您的项目,这里我将其命名为“MultiFactorAuthenticationDemo”并单击“下一步”。
  4. 在“附加信息”窗口的“框架”中,选择“.NET 8”,然后单击“创建”。
  5. 现在,项目已创建,项目结构如下图所示。

步骤 2. 安装软件包

现在,让我们安装项目所需的软件包。

  1. 单击“项目”并选择“管理 NuGet 包”。
  2. 在“浏览”的搜索框中输入“Google.Authenticator”。
  3. 选择它并单击“安装”。
  4. 将会打开一个弹出窗口,单击“我接受”。安装后,它将显示在依赖项下的包中。

步骤 3. 在 Appsettings.json 中配置身份验证密钥

现在,我们必须为我们的应用程序创建一个身份验证密钥。它可以是字符、数字或特殊字符的任意组合。我在下面创建了一个演示密钥。

"AuthenticatorKey": "Demo123",

步骤4.创建会话

我将使用会话来存储一些数据,如用户名等。因此,让我们在 program.cs 中添加会话代码。

builder.Services.AddSession(options =>
{options.IdleTimeout = TimeSpan.FromMinutes(30);
});
// ...
app.UseSession();

现在,会话已添加并可供使用。

步骤 5.创建模型

现在,让我们向我们的项目添加一个模型。

public class LoginModel
{public string Username { get; set; }public string Password { get; set; }
}

我们将使用该模型来存储用户名和密码等登录信息。

此外,我将使用另一个模型,即 GlobalData 模型来存储布尔值,并将在稍后的代码中使用它。

public static class GlobalData
{public static bool isLoggedIn { get; set; }
}

该模型将存储用户是否登录。

步骤 6. 创建控制器并添加构造函数

让我们创建一个用于登录和多因素身份验证方法的控制器。我将其命名为“LoginController”。

让我们创建一个构造函数及其属性供其使用。

private readonly IConfiguration _configuration;
public LoginController(IConfiguration configuration)
{_configuration = configuration;
}

稍后我们将使用 _configuration 来访问“AuthenticatorKey”。

步骤 7. 创建登录方法

让我们添加一个登录方法。

[HttpGet]
[Route("login")]
public IActionResult Login()
{GlobalData.isLoggedIn = false;var message = TempData["message"];ViewBag.Message = message;return View();
}

在上面的代码中,我创建了一个 HttpGet 方法来呈现登录视图。在这里,我在“GlobalData.isLoggedIn”中指定了 false。使用 ViewBag 在登录页面上显示消息,以防出现故障。

现在,我们来添加一个login的post方法。

[HttpPost]
[Route("login")]
public ActionResult Verify(LoginModel login)
{string? username = HttpContext.Session.GetString("Username");string isValidStr = HttpContext.Session.GetString("IsValidTwoFactorAuthentication");bool? isValidTwoFactorAuthentication = isValidStr != null ? bool.Parse(isValidStr) : (bool?)null;if (username == null || isValidTwoFactorAuthentication == false || isValidTwoFactorAuthentication == null){if (login.Username == "Admin" && login.Password == "12345"){HttpContext.Session.SetString("Username", login.Username);return RedirectToAction("MultiFactorAuthentication");}}return RedirectToAction("Index");
}

在上面的代码中,我们首先检查会话中是否有数据。如果会话为空且用户名和密码匹配,则我们将在会话中设置用户名并重定向到 MultiFactorAuthentication 进行多因素身份验证。

步骤 7. 添加多重身份验证方法

[HttpGet]
[Route("multi-factor-authentication")]
public IActionResult MultiFactorAuthentication()
{if (HttpContext.Session.GetString("Username") == null){return RedirectToAction("Login");}string? username = HttpContext.Session.GetString("Username");string authKey = _configuration.GetValue<string>("AuthenticatorKey");string userUniqueKey = username + authKey;// Two Factor Authentication SetupTwoFactorAuthenticator twoFacAuth = new();var setupInfo = twoFacAuth.GenerateSetupCode("MultiFactorAuthenticationDemo",username,ConvertSecretToBytes(userUniqueKey, false),300);HttpContext.Session.SetString("UserUniqueKey", userUniqueKey);ViewBag.BarcodeImageUrl = setupInfo.QrCodeSetupImageUrl;ViewBag.SetupCode = setupInfo.ManualEntryKey;return View();
}

在上面的代码中,我创建了一个名为“MultiFactorAuthentication”的方法,它将呈现用于多因素身份验证的二维码。在这里,如果会话中的用户名为空,那么我们将重定向到登录,否则从应用程序设置中获取身份验证密钥,并使用用户名和身份验证密钥的组合创建一个唯一密钥。然后我们将创建 TwoFactorAuthenticator 类的对象,并使用此对象创建一个二维码。现在,我们将这些东西存储在 ViewBag 中以在视图页面上使用它们。

现在,让我们创建一个验证认证码的post方法。

public ActionResult MultiFactorAuthenticate()
{var token = Request.Form["CodeDigit"];TwoFactorAuthenticator TwoFacAuth = new();string? UserUniqueKey = HttpContext.Session.GetString("UserUniqueKey");// bool isValid = TwoFacAuth.ValidateTwoFactorPIN(UserUniqueKey, token);bool isValid = TwoFacAuth.ValidateTwoFactorPIN(UserUniqueKey, token, TimeSpan.FromSeconds(90)); // will be valid for 30 secondsif (isValid){HttpContext.Session.SetString("IsValidTwoFactorAuthentication", "true");GlobalData.isLoggedIn = true;return RedirectToAction("Dashboard");}TempData["message"] = "Google Two Factor PIN is expired or wrong";return RedirectToAction("Login");
}

在上面的代码中,我们将用户输入的代码存储在名为“token”的变量中。然后我们将创建 TwoFactorAuthenticator 类的一个对象,并使用该对象验证输入的密码。如果有效,我们将在会话中将“IsValidTwoFactorAuthentication”存储为 true 值。并在“GlobalData.isLoggedIn”中分配 true 并重定向到仪表板。如果密码错误或已过期,我们将显示一条消息。

public ActionResult Dashboard()
{if (HttpContext.Session.GetString("IsValidTwoFactorAuthentication") == "true"){return View();}else{return RedirectToAction("Login");}
}

在上面的代码中,我为仪表板创建了一个方法,只有当多因素身份验证成功时才会访问该方法。

public ActionResult Logout()
{HttpContext.Session.Remove("UserName");HttpContext.Session.Remove("IsValidTwoFactorAuthentication");HttpContext.Session.Remove("UserUniqueKey");return RedirectToAction("Login");
}

在上面的代码中,我们删除了会话中存储的注销数据。

步骤 8.添加登录视图

要创建视图,请右键单击 Login() 方法,单击“添加视图”,然后命名视图,我将其命名为“Login.cshtml”。您的视图文件已创建。

在 Login.cshtml

<div class="center"><div class="row" id="login"><div id="login-box" class="col-md-12"><h2 class="text-info">Login</h2>@using (Html.BeginForm("Verify", "Login", FormMethod.Post)){<div class="form-group mb-3"><label class="form-label mb-3 required" for="username">Username</label>@Html.TextBoxFor(m => m.Username, new { @class = "form-control", @placeholder = "Username", @required = true })</div><div class="form-group mb-3"><label class="form-label mb-3 required" for="password">Password</label>@Html.PasswordFor(m => m.Password, new { @class = "form-control", @placeholder = "Password", @required = true })</div><div class="form-group text-center"><input type="submit" name="submit" class="btn btn-success" value="Login"></div>}</div><div>@ViewBag.Message</div></div>
</div>

在上面的代码中,我添加了一个表单来获取用户名和密码。如果有错误消息,它将显示在下面。

步骤 9.添加多重身份验证视图

右键单击 MultiFactorAuthentication() 方法,单击“添加视图”,然后命名视图,我将其命名为“MultiFactorAuthentication.cshtml”。您的视图文件已创建。

<div class="center"><div class="row" id="login"><div id="login-box" class="col-md-12"><div class="mb-3"><img src="@ViewBag.BarcodeImageUrl" width="300" height="300" /></div><div class="row mb-3">Manual Setup Code : @ViewBag.SetupCode</div><div>@using (Html.BeginForm("MultiFactorAuthenticate", "Login", FormMethod.Post)){<div class="form-group mb-3"><label class="form-label mb-3 required" for="username">Code</label><input type="text" class="form-control" placeholder="Enter Authenticator Code" name="CodeDigit" /></div><div class="form-group text-center"><input type="submit" class="btn btn-success" /></div>}</div></div></div>
</div>

在上面的代码中,我展示了用户将在任何身份验证器应用程序(Google 或 Microsoft Authenticator)中扫描的二维码。然后是手动设置代码。然后我添加了一个表单来获取身份验证器代码。

在这里,用户可以使用二维码或身份验证器应用程序中的设置代码来获取代码。

步骤 10. 添加仪表板视图

右键单击 Dashboard() 方法,单击“添加视图”,然后命名视图,我将其命名为“Dashboard.cshtml”。您的视图文件已创建。

<div>Hey, you have successfully logged in using Multi factor authentication.
</div>

在这里,我向用户展示了一个演示消息,该消息将显示一次,用户完成多因素身份验证。

现在,您可以运行该应用程序。

这是登录视图。提交表单后,将打开下一页。

在这里,用户可以扫描代码或在身份验证器应用中输入设置代码来获取代码。然后用户将提交代码。如果代码有效,则将显示仪表板。


现在,我们已经在 ASP.NET MVC 项目中成功实现了多因素身份验证。

结论

在 ASP.NET MVC 项目中使用身份验证器应用实现多因素身份验证 (MFA) 可增强用户身份验证的安全性。该过程包括设置项目、配置身份验证密钥以及创建登录和验证所需的模型和控制器。通过集成双因素身份验证系统,用户需要提供由身份验证器应用生成的额外验证码,从而显著提高对未经授权访问的保护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/3225362.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

谷粒商城学习笔记-23-分布式组件-SpringCloud Alibaba-Nacos配置中心-简单示例

之前已经学习了使用Nacos作为注册中心&#xff0c;这一节学习Nacos另外一个核心功能&#xff1a;配置中心。 一&#xff0c;Nacos配置中心简介 Nacos是一个易于使用的平台&#xff0c;用于动态服务发现和配置管理。作为配置中心&#xff0c;Nacos提供了以下核心功能和优势&am…

高盛开源的量化金融 Python 库

GS Quant GS Quant是用于量化金融的Python工具包&#xff0c;建立在世界上最强大的风险转移平台之一之上。旨在加速量化交易策略和风险管理解决方案的开发&#xff0c;凭借25年的全球市场经验精心打造。 它由高盛的定量开发人员&#xff08;定量&#xff09;创建和维护&#…

TCP Analysis Flags 之 TCP Previous segment not captured

前言 默认情况下&#xff0c;Wireshark 的 TCP 解析器会跟踪每个 TCP 会话的状态&#xff0c;并在检测到问题或潜在问题时提供额外的信息。在第一次打开捕获文件时&#xff0c;会对每个 TCP 数据包进行一次分析&#xff0c;数据包按照它们在数据包列表中出现的顺序进行处理。可…

从零开始学习嵌入式----Linux系统命令集合与shell脚本

Shell是一门编程语言&#xff0c;作为学习shell的开始&#xff0c;需要事先搞明白&#xff1a;编程的目的是什么&#xff1f;什么是编程语言&#xff1f;什么是编程&#xff1f; shell本身就是一门解释型、弱类型、动态语言&#xff0c;与python相对应&#xff0c;Python属于解…

C++ 帕斯卡三角形(Pascal’s Triangle)

帕斯卡三角形是二项式系数的三角形阵列。编写一个函数&#xff0c;以整数值N作为输入&#xff0c;并打印帕斯卡三角形的前N​​行。 例子&#xff1a; 下图显示了 N6 的帕斯卡三角形 使用二项式系数的帕斯卡三角形&#xff1a; 每行的条目数等于行号。例如&#xff…

600Kg大载重起飞重量多旋翼无人机技术详解

600Kg大载重起飞重量的多旋翼无人机是一种高性能的无人驾驶旋翼飞行器&#xff0c;具有出色的载重能力和稳定的飞行特性。该无人机采用先进的飞行控制系统和高效的动力系统&#xff0c;能够满足各种复杂任务的需求&#xff0c;广泛应用于物资运输、应急救援、森林防火等领域。 …

第一章(下)——计算机的性能指标

&#x1f308;个人主页&#xff1a;小新_- &#x1f388;个人座右铭&#xff1a;“成功者不是从不失败的人&#xff0c;而是从不放弃的人&#xff01;”&#x1f388; &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd; &#x1f3c6;所属专栏&#xff1…

vue实现预览编辑ppt、word、pdf、excel、等功能的解决方案(内网-前端)

在Vue中实现预览和编辑PPT、Word、PDF、Excel等文件的功能&#xff0c;尤其是在内网环境下且主要侧重于前端&#xff0c;我们需要明确的是&#xff0c;直接在前端编辑这些格式的文件&#xff08;特别是PPT和Word&#xff09;是非常复杂且通常不推荐的&#xff0c;因为这些格式涉…

智能汽车网络安全笔记

汽车五大域 动力底盘、车身控制、智能座舱、智能网联和高级辅助驾驶五大域 国外汽车安全法规标准 汽车网络安全管理体系&#xff08;CSMS&#xff09; CSMS指的是管理汽车的网络威胁和风险&#xff0c;并保护车辆免受网络攻击的组织过程和管理系统 安全验证和安全测试 8…

极狐GitLab亮相世界人工智能大会,开启开源大模型赋能软件研发新时代

GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab &#xff1a;https://gitlab.cn/install?channelcontent&utm_sourcecsdn 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署…

1.电阻(常见元器件及电路基础知识)

一.电阻器 1.电阻值与精度 差不多这样一个大小的本子&#xff0c;一般入门建议买0603的电容和电阻本&#xff0c;然后常用的值就单独拎出来&#xff0c;放元器件盒子 总体上来说这些电阻阻值都是大差不差的&#xff0c;精度也无非 更小&#xff0c;1%&#xff0c;5%&#xff0…

LabVIEW机器视觉技术在产品质量检测中有哪些应用实例

LabVIEW的机器视觉技术在产品质量检测中有广泛的应用&#xff0c;通过图像采集、处理和分析&#xff0c;实现对产品缺陷的自动检测、尺寸测量和定位校准&#xff0c;提高生产效率和产品质量。 1. 电子元器件质量检测 在电子制造业中&#xff0c;电子元器件的质量检测是确保产品…

Leedcode刷题——7 滑动窗口 双指针

注&#xff1a;以下代码均为c 1. 两数之和2&#xff08;输入有序数组&#xff09; // 法1&#xff1a;暴力 vector<int> twoSum1(vector<int>& numbers, int target) {vector<int> ans(2);int n numbers.size();for(int i 0; i < n-1; i){if(i ! 0…

【C++报错已解决】Invalid Conversion from ‘const char*’ to ‘char*’

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 文章目录 引言 ❓ 一、问题描述 &#x1f469;‍&#x1f52c;1.1 报错示例 &#x1f3c6;1.2 报错分析 &#x1f4da;1.3 解决…

英福康INFICON FabGuard传感器集成与分析系统PPT

英福康INFICON FabGuard传感器集成与分析系统PPT

移动互联安全

什么是移动互联 从狭义的角度来说&#xff0c;移动互联网是一个以宽带IP为技术核心&#xff0c;可同时提供语音、传真、图像、多媒体等高品质电信服务的新一代开放的电信基础网络。 从广义的角度来说&#xff0c;移动互联网是指将互联网提供的技术、平台、应用以及商业模式&…

045基于SSM+Jsp的固定资产管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

Claude artifacts的平替:deepseek和豆包Marscode的web预览

Claude Artifacts 是由 Anthropic 开发的先进 AI 模型 Claude 3 生成的输出。这些 Artifacts 可以是文本、图像、数据可视化&#xff0c;甚至是更复杂的输出&#xff0c;如交互式内容和自动化报告。此外&#xff0c;Artifacts 还可以是预构建的资源或模板&#xff0c;旨在简化各…

深度学习组件优化器简介--AI(七)

深度学习网络组件介绍 网络组件优化器优化器--SGD优化器--Adam 网络组件 前文介绍的组件如下&#xff1a; 优化器 释义&#xff1a; 损失函数计算出预测值与真实值之间的差距时&#xff0c;有优化器根据一定的策略去调整原有模型的权重&#xff0c;这个调整的策略可以理解成…

安装python2

参考&#xff1a; https://www.cnblogs.com/linjiangplus/p/13948593.html https://www.python.org/downloads/release/python-2718/