一、新建用户

1、先新建一个用户表,用户存储用户信息。

     public class UserInfo
{
public const string Salt = "cesi";
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set; }
[Required]
public string UserName { get; set; }
[Required]
public string PassWord { get; set; }
public string CreateTime { get; set; }
}

2、新建一个添加用户的接口,添加一个用户,方便后面测试。

         [HttpPost]
public async Task<IActionResult> AddUser([FromForm]UserInfo model)
{
if (_context.UserInfo.Any(s => model.UserName.Equals(s.UserName)))
{
return Ok(new
{
code = ResultCode.Error,
message = "用户名称已存在,请确认!"
});
}
model.CreateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
var pwd = model.PassWord;
var passWordAndSaltBytes = Encoding.UTF8.GetBytes(pwd + UserInfo.Salt);
var hashBytes = new SHA256Managed().ComputeHash(passWordAndSaltBytes);
string hashString = Convert.ToBase64String(hashBytes);
model.PassWord = hashString;
await _context.AddAsync(model);
await _context.SaveChangesAsync();
return Ok(new
{
code = ResultCode.Success,
message = "创建用户信息成功!"
});
}

3、调用接口添加用户信息。

二、实现用户登录

1、实现用户登录

         [HttpPost("login")]
public async Task<IActionResult> Login([FromForm]LoginModel model)
{
var passWordAndSaltBytes = Encoding.UTF8.GetBytes(model.PassWord + UserInfo.Salt);
var hashBytes = new SHA256Managed().ComputeHash(passWordAndSaltBytes);
string hashString = Convert.ToBase64String(hashBytes);
var userInfo = _context.UserInfo.AsNoTracking().FirstOrDefault(p => p.UserName == model.UserName && p.PassWord == hashString);
if (userInfo == null)
{
return Ok(new { code = ResultCode.NotLogin, message = "用户名或密码错误" });
}
var httpcontext = _httpContextAccessor.HttpContext;
var claimsIdentity = new ClaimsIdentity("Cookie");
claimsIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, userInfo.Id.ToString()));
claimsIdentity.AddClaim(new Claim(ClaimTypes.Name, model.UserName));
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
await HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme, claimsPrincipal);
return Ok(new { code = ResultCode.Success, message = "登录成功", data = userInfo });
}

2、调用登录接口,测试

三、Setup配置

         public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.LoginPath = "/api/Login/Index";
options.AccessDeniedPath = "/api/Login/Denied";
});
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromSeconds();
options.Cookie.HttpOnly = true;
});
services.AddCors(options =>
{
string[] CorsOrigins = Configuration["CorsOrigins"].Split(';');
options.AddPolicy("AnyCors",
policy => policy.WithOrigins(CorsOrigins)
.AllowAnyHeader()
.AllowAnyMethod()
.AllowCredentials());
});
string connecttext = Configuration.GetConnectionString("Sqlite");
services.AddDbContext<SqlContext>(options => options.UseSqlite(connecttext), ServiceLifetime.Singleton);
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
} public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseHsts();
}
app.UseAuthentication();
app.UseCors("AnyCors");
app.UseHttpsRedirection();
app.UseCookiePolicy();
app.UseStaticFiles();
app.UseMvc();
}

.net core 使用ClaimsIdentity实现登录授权的更多相关文章

  1. ASP.Net Core 2.1+ Cookie 登录授权验证【简单Cookie验证】

    介绍 本文章发布于博客园:https://www.cnblogs.com/fallstar/p/11310749.html 作者:fallstar 本文章适用于:ASP.NET Core 2.1 + ...

  2. Asp.Net Core 2.0 项目实战(10) 基于cookie登录授权认证并实现前台会员、后台管理员同时登录

    1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...

  3. net core体系-web应用程序-4asp.net core2.0 项目实战(1)-12基于cookie登录授权认证并实现前台会员、后台管理员同时登录

    1.登录的实现 登录功能实现起来有哪些常用的方式,大家首先想到的肯定是cookie或session或cookie+session,当然还有其他模式,今天主要探讨一下在Asp.net core 2.0下 ...

  4. Asp .Net Core 2.0 登录授权以及多用户登录

    用户登录是一个非常常见的应用场景 .net core 2.0 的登录方式发生了点变化,应该是属于是良性的变化,变得更方便,更容易扩展. 配置 打开项目中的Startup.cs文件,找到Configur ...

  5. Asp .Net Core 2.0 登录授权以及前后台多用户登录

    用户登录是一个非常常见的应用场景 .net core 2.0 的登录方式发生了点变化,应该是属于是良性的变化,变得更方便,更容易扩展. 配置 打开项目中的Startup.cs文件,找到Configur ...

  6. 零开始:NetCore项目权限管理系统:登录授权

    喜欢NetCore的朋友,欢迎加群QQ:86594082 源码地址:https://github.com/feiyit/SoaProJect 管理员的模型 namespace FytSoa.Core. ...

  7. 使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)——第1部分

    原文:使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)--第1部分 原文链接:https://www.codeproject.com/Articles/5160941/ASP- ...

  8. .NET Core中的鉴权授权正确方式(.NET5)

    一.简介 前后端分离的站点一般都会用jwt或IdentityServer4之类的生成token的方式进行登录鉴权.这里要说的是小项目没有做前后端分离的时站点登录授权的正确方式. 一.传统的授权方式 这 ...

  9. 网站微信登录授权 ASP.NET

    最新做一些项目都有微信登录注册什么的,今天就把自己整理的demo提供给大家 微信认证流程(我自己简称三次握手): 1.用户同意授权,获取code 2.通过code换取网页授权access_token, ...

随机推荐

  1. 转载 C# 开源框架(整理)

    C# 开源框架(整理)http://www.cnblogs.com/gaoyuchuanIT/articles/5612268.html Json.NET http://json.codeplex.c ...

  2. Springboot如何优雅的解决ajax+自定义headers的跨域请求[转]

    1.什么是跨域 由于浏览器同源策略(同源策略,它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略.所谓同源是指,域名,协议,端口相同.),凡是发 ...

  3. 如何使用ArcGIS Pro发布自定义打印服务

    我们知道可以通过ArcGIS Map来发布自定义打印服务.从ArcGIS Enterprise 10.6.1版本起,打印服务的功能更加完善了,改进点包括: 支持打印矢量切片服务 改进了智能制图和颜色透 ...

  4. 游戏服务器与客户端交互,或者与跨服交互都有消息加密方式,为什么不明文传递,加md5校验呢

    游戏服务器与客户端交互,或者与跨服交互都有消息加密方式,为什么不明文传递,加md5校验呢

  5. segfault at 0 ip sp error 14

    error 14从未见过.谁能帮我解答什么情况才会出现这个,而且怎么定位崩溃函数地址? 备忘: segfault at 引起故障的地址ip 指令的内存地址sp 堆栈指针地址, 及栈顶指针err is ...

  6. php unset

    说明:unset ( mixed $var [, mixed $... ] ) : void unset() 销毁指定的变量. unset() 在函数中的行为会依赖于想要销毁的变量的类型而有所不同. ...

  7. [FUZZ]文件上传fuzz字典生成脚本—使用方法

    文件上传fuzz字典生成脚本-使用方法 原作者:c0ny1 项目地址:https://github.com/c0ny1/upload-fuzz-dic-builder 项目预览效果图: 帮助手册: 脚 ...

  8. vmware exsi安装部署

    本文章参考:https://blog.csdn.net/fishinhouse/article/details/80980051 1.VMware-ESXi-6.5.0镜像下载 网盘链接:https: ...

  9. 2018-2019-2 网络对抗技术 20165322 Exp9 Web安全基础

    2018-2019-2 网络对抗技术 20165322 Exp9 Web安全基础 目录 实验内容与步骤 (一)Webgoat安装 (二)SQL注入攻击 1.命令注入(Command Injection ...

  10. JavaWeb三大组件(Servlet、Filter、Listener)

    JavaWeb三大组件指的是:Servlet.Filter.Listener,这三个组件在JavaWeb开发中分别提供不同的功能,然而很多人可能只用过其中一个或者两个(Servlet.Filter,比 ...