宝哥软件园

浅谈如何在ASP .净核心中实现一个基础的身份认证

编辑:宝哥软件园 来源:互联网 时间:2021-09-07

ASP .网终于可以跨平台了,但是不是我们常用的ASP .NET,而是叫一个ASP。网核心的新平台,他可以跨视窗、Linux、OS X等平台来部署你的网应用程序,你可以理解为,这个框架就是ASP .网的下一个版本,相对于传统ASP .网程序,它还是有一些不同的地方的,比如很多类库在这两个平台之间是不通用的。

今天首先我们在ASP .净核心中来实现一个基础的身份认证,既登陆功能。

前期准备:

1.推荐使用VS 2015更新3作为你的IDE,下载地址://www .JB 51。net/soft JC/446184。超文本标记语言

2.你需要安装。净核心的运行环境以及开发工具,这里提供对版://www .JB 51。net/softs/472362。超文本标记语言

创建项目:

在对中新建项目,项目类型选择ASP .网核心网络应用程序(。网核心),输入项目名称为TestBasicAuthor。

接下来选择网络应用,右侧身份认证选择:没有身份验证

打开Startup.cs

在配置服务方法中加入如下代码:

服务AddAuthorization();在安装使成形方法中加入如下代码:

应用程序.UseCookieAuthentication(新的CookieAuthenticationOptions { AuthenticationScheme=' Cookie ',LoginPath=新的路径字符串('/帐户/登录'),访问拒绝路径=新的路径字符串('/账户/禁地),AutomaticAuthenticate=true,automatic challenge=true });完整的代码应该是这样:

public void ConfigureServices(IServiceCollection services){ services .AddMvc();服务AddAuthorization();}公共void Configure(IApplicationBuilder应用程序,IHostingEnvironment env,ILoggerFactory logger factory){ app .UseCookieAuthentication(新的CookieAuthenticationOptions { AuthenticationScheme=' Cookie ',LoginPath=新的路径字符串('/帐户/登录'),访问拒绝路径=新的路径字符串('/账户/禁地),AutomaticAuthenticate=true,automatic challenge=true });应用程序.UseMvc(routes={ routes .MapRoute(名称: '默认',模板: ' {控制器=Home }/{操作=Index }/{ id?}');});}你或许会发现贴进去的代码是报错的,这是因为还没有引入对应的包,进入报错的这一行,点击灯泡,加载对应的包就可以了。

在项目下创建一个文件夹命名为模型,并向里面添加一个类User.cs

代码应该是这样

公共类用户{公共字符串用户名{ get设置;}公共字符串密码{ get设置;}}创建一个控制器,取名为:AccountController.cs

在类中贴入如下代码:

[HttpGet]public IActionResult log in(){ return View();}[httpset]公共异步任务结果登录(用户用户来自前端){来自存储的变量用户=测试用户存储.用户列表第一个或默认(m=m . UserName==用户从前面开始.用户名=密码=用户密码。密码);if (userFromStorage!=null){//您可以添加此集合中的所有索赔类型var索赔=新列表索赔(){新索赔类型(索赔类型.名称,用户自存储。用户名)//,新声明(声明类型)。电子邮件,'[电子邮件保护]')};//初始化身份实例var用户主体=new ClaimsPrincipal(new ClaimsIdentity(claims,‘supercurelog in’));//登录等待HttpContext .身份验证。签名同步(“Cookie”,用户主体,新的身份验证属性{ ExpiresUtc=DateTime .UtcNow。AddMinutes(20),IsPersistent=false,allow fresh=false });返回RedirectToAction('Index ',' Home ');} else { ViewBag .错误消息="用户名或密码无效";返回视图();} }公共异步TaskIActionResult Logout(){等待HttpContext .身份验证signout async(' Cookie ');返回RedirectToAction('Index ',' Home ');}相同的文件里让我们来添加一个模拟用户存储的类

//简单来说,我不是用数据库来存储用户数据,只是用一个静态类来代替它。公共静态类testuser storage {公共静态列表用户用户列表{ get设置;}=新列表用户(){新用户{用户名='User1 ',密码=' 112233 ' } };}接下来修复好各种引用错误。

完整的代码应该是这样

使用系统;使用系统。集合。通用;使用系统Linq .使用系统。线程化。任务;使用微软AspNetCore。手动音量调节使用TestBasicAuthor .模型;使用系统。安全。索赔;使用微软AspNetCore。Http。认证;//有关为空项目启用手动音量调节的更多信息,请访问http://go.microsoft.com/fwlink/?LinkID=397860namespace测试基础库。控制器{公共类帐户控制器:控制器{[HttpGet]public IActionResult log in(){ return View();}[httpset]公共异步任务结果登录(用户用户来自前端){来自存储的变量用户=测试用户存储.用户列表第一个或默认(m=m . UserName==用户从前面开始.用户名=密码=用户密码。密码);if (userFromStorage!=null){//您可以添加此集合中的所有索赔类型var索赔=新列表索赔(){新索赔类型(索赔类型.名称,用户自存储。用户名)//,新声明(声明类型)。电子邮件,'[电子邮件保护]')};//初始化身份实例var用户主体=new ClaimsPrincipal(new ClaimsIdentity(claims,‘supercurelog in’));//登录等待HttpContext .身份验证。签名同步(“Cookie”,用户主体,新的身份验证属性{ ExpiresUtc=DateTime .UtcNow。AddMinutes(20),IsPersistent=false,allow fresh=false });返回RedirectToAction('Index ',' Home ');} else { ViewBag .错误消息="用户名或密码无效";返回视图();} }公共异步TaskIActionResult Logout(){等待HttpContext .身份验证signout async(' Cookie ');返回RedirectToAction('Index ',' Home ');} }//简单来说,我不是用数据库来存储用户数据,只是用一个静态类来代替。公共静态类TestUserStorage {公共静态列表用户用户列表{获取设置;}=新列表用户(){新用户{用户名='User1 ',密码=' 112233 ' } };}}在视图文件夹中创建一个账户文件夹,在账户文件夹中创建一个名位index.cshtml的视角文件。

贴入如下代码:

TestBasicAuthor模型.模特。UserHTMl xmlns=' http://www。w3。org/1999/XHTML ' head title/title/head dy @ using(Html .begin inform()){ table tr TD/TD td@ViewBag.ErrMsg/td/tr tdUserName/TD TD TD @ Html .TextBox FOr(m=m . USername)/TD/tr tdPassword/TD TD TD @ Html .密码for(m=m . Password)/TD/tr TD/TD tdbuttonlog in/button/TD/tr/table }/body/html打开HomeController.cs

添加一个操作,授权页面。

[Authorize][HttpGet]public IActionResult AuthPage(){ return View();}在视图/主页下添加一个视图,名为AuthPage.cshtml

html xmlns=' http://www。w3。org/1999/XHTML ' head title/title/head body h1 auth page/h1 pif如果您未获得授权,则无法访问此页面/p/body/html到此,一个基础的身份认证就完成了,核心登陆方法如下:

等待HttpContext .身份验证。签名同步(“Cookie”,用户主体,新的身份验证属性{ ExpiresUtc=DateTime .UtcNow。AddMinutes(20),IsPersistent=false,allow fresh=false });启用验证如下:

公共空配置(IApplicationBuilder应用程序,IHostingEnvironment env,ILoggerFactory logger factory){ app .UseCookieAuthentication(新的CookieAuthenticationOptions { AuthenticationScheme=' Cookie ',LoginPath=新的路径字符串('/帐户/登录'),访问拒绝路径=新的路径字符串('/账户/禁地),AutomaticAuthenticate=true,automatic challenge=true });}在某个控制器或行动添加[作者],即可配置位需要登陆验证的页面。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

更多资讯
游戏推荐
更多+