在Asp.Net框架中提供了几种身份验证方式:Windows身份验证、Forms身份验证、passport身份验证(单点登录验证)。
每种验证方式都有适合它的场景:
1.Windowss身份验证通常用于企业内部环境,Windows Active Directory就是基于windows平台的身份验证实现;
2.Forms身份验证是Asp.Net框架中提出的另一种验证方式;
3.passport身份验证是微软提供的基于自己的lives账号实现的单点认证服务。
Asp.net Core验证码登录遇到两个小问题
第一是在Asp.net Core中引用dll,以往我们引用DLL都是直接引用,在Core里这样是不行的,必须基于NuGet添加,或者基于project.json添加,然后保存VS会启动还原类库。
第二就是使用Session的问题,Core里使用Session需要添加Session类库。
第一步:在你的项目上基于NuGet添加:
install-package Microsoft.AspNetCore.Session -ver 2.0 install-package Microsoft.AspNetCore.Http.Extensions -ver 2.0
第二步:修改startup.cs
在startup.cs找到方法ConfigureServices(IServiceCollection services) 注入Session(这个地方是Asp.net Core pipeline):
services.AddSession();
接下来我们要告诉Asp.net Core使用内存存储Session数据,在Configure(IApplicationBuilder app,...)方法中添加代码:
app.UseSession();
基于Session的身份验证实现
这种方式可能是在Asp.Net框架提供的几种验证方式之外的最常用的身份验证方式。
实现原理
1.客户端发送身份认证数据到服务器端
2.服务器收到并验证后将用户信息保存到Session对象中,然后生成对应的标识并将标识写入cookie中
3.当客户端下次请求时带上该cookie标识
4.服务器通过该cookie标识从session对象中获取对应的用户信息
Asp.Net Core中的Session身份认证实现
基于Session的身份认证并不是Asp.Net Core中推荐的认证方式,因为Asp.Net Core中有更高级的Forms身份认证方式,不过在这里不是本文章的主题,我们只讲如何在Asp.Net Core中实现基于Session的身份认证。
我们先创建一个用于代码演示的基础项目
dotnet new razor -n SessionSample
在startup.cs中启用session功能
public class Startup { public void ConfigureServices(IServiceCollection services) { ... //添加session服务 services.AddSession(); } public void Configure(IApplicationBuilder app, IHostingEnvironment env) { ... //启用session app.UseSession(); app.UseMvc(); } }
创建一个MyPage.cs文件,我们在该类中实现了一个IsLogin属性,该属性用来判断用户的登陆状态:
public class MyPage:PageModel { protected bool IsLogin { get { string userId = null; //从sessin中获取UserId对应的用户信息来判断用户是否登陆 if (HttpContext.Session.TryGetValue("UserId", out byte[] bytes)) { userId = Encoding.UTF8.GetString(bytes); } return !string.IsNullOrWhiteSpace(userId); } } }
我们已经实现了验证,现在缺少的是如何在session中添加UserId的信息,我们来创建一个Login页面:
dotnet new page -n Login
public class LoginModel : MyPage { public void OnGet() { if(IsLogin) { //如果已经登陆就跳转到/Index页面 RedirectToPage("/Index"); } } public IActionResult OnPost() { //这里我们将UserId写入session中 HttpContext.Session.SetString("UserId", Guid.NewGuid().ToString()); return RedirectToPage("/Index"); } }
给现有的页面添加验证功能,打开Index页面,添加如下代码:
public class IndexModel : MyPage { public IActionResult OnGet() { if (!IsLogin) { return RedirectToPage("/Login"); } return Page(); } }
OK!我们已经实现了身份认证。
源代码
总结
我们描述了传统Asp.Net中提供的几种身份认证方式,并在Asp.Net Core实现了一种虽然不标准但是常用的身份认证机,看起了与Asp.Net中的用法并没有什么区别。
在Asp.Net Core中这种用法似乎并不受欢迎,可能是因为Asp.Net Core提供了更高级的身份验证机制吧,那么这篇文章存在的意义呢?权当做是对Asp.Net的一种纪念吧!
现在是.net core的时代,让.net洗洗睡吧!以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
所以我正忙着为twitter开发一个应用程序,我希望人们使用PIN进行身份验证。(https://dev.twitter.com/oauth/pin-based). 要向人们显示PIN码,我需要使用以下命令:https://dev.twitter.com/oauth/reference/get/oauth/authorize 那里的例子说:https://api.twitter.com/oauth
问题内容: 我正在PHP Lumen中构建一个应用程序,该应用程序在登录时会返回令牌。我不知道如何继续进行。 我应该如何使用这些令牌维护会话? 具体来说,如果我使用reactjs或原始HTML / CSS / jQuery,如何将令牌存储在客户端,并在我为Web应用程序的安全部分提出的每个请求中发送令牌? 问题答案: 我通常要做的是将令牌保留在本地存储中,这样即使用户离开站点,我也可以保留令牌。
我正在PHP Lumen中构建一个应用程序,它在登录时返回令牌。我不知道如何继续。 我应该如何使用这些令牌维护会话? 具体来说,如果我使用reactjs或vanilla HTML/CSS/jQuery,我如何在客户端存储令牌,并在我为web应用程序的安全部分发出的每个请求中发送它们?
我正在尝试在springboot中实现Basic Auth oAuth2,这意味着一些url在登录系统后应该像传统方式一样工作,而一些应该在AOuth2上工作。 就像我想允许访问SuperAdmin for admin面板一样,url从 /超级管理员/**** 我只想在登录系统后访问所有这些url。 Rest服务应该在AOuth2上工作,url从表单开始 /API/VI/* * * * * 这些U
注意:我的问题与Spring-Boot REST API+web应用程序的安全性有关。
问题内容: 我有一个REST API,我正在使用Spring Security基本授权进行身份验证,客户端会为每个请求发送用户名和密码。现在,我想实现基于令牌的身份验证,当用户最初通过身份验证时,我将在响应标头中发送令牌。对于进一步的请求,客户端可以在令牌中包含该令牌,该令牌将用于对资源进行用户身份验证。我有两个身份验证提供程序tokenAuthenticationProvider和daoAuth