.Net Core:身份认证组件
类库组件
.NET Core的身份认证使用的类库如下图:常用的
Microsoft.AspNetCore.Authorization
Microsoft.AspNetCore.Authorization.Cookies
Microsoft.AspNetCore.Authorization.OpenIdConnect
Microsoft.AspNetCore.Authorization.OAuth

演示下基于Cookies的
Startup.cs添加管道支持:
ConfigureService:
services.AddAuthorization();
Configure:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme = "Cookie",
LoginPath = new PathString("/Account/Login"),
AccessDeniedPath = new PathString("/Account/Forbidden"),
AutomaticAuthenticate = true,
AutomaticChallenge = true
});
环境支持配置完以后;老套路简单使用一下
Controller或者Action添加[Authorize];Claim声明一些属性,加入到ClaimIdentity(IIdentity)属性标识;通过ClaimIdentity再创建身份ClaimPrincipal(IPrincipal)出来;存入Cookie
AccountController :
public class AccountController : Controller
{
[Authorize]
// GET: /<controller>/
public IActionResult Index()
{
return View();
} [HttpGet]
public IActionResult Login()
{
return View();
} [HttpPost]
public async Task<IActionResult> Login(LoginViewModel model)
{
if (model.Username.Equals("admin")&&model.Password.Equals(""))
{
//名片
List<Claim> claims = new List<Claim>
{
new Claim(ClaimTypes.Name,model.Username)
};
//身份
ClaimsPrincipal principal = new ClaimsPrincipal(new ClaimsIdentity(claims,"Login")); await HttpContext.Authentication.SignInAsync("Cookie", principal, new AuthenticationProperties {
ExpiresUtc = DateTime.UtcNow.AddMinutes(),
IsPersistent=false,
AllowRefresh=false,
}); return RedirectToAction("Index","Account"); }
else
{
return Content("用户名密码错误!");
} } public async Task<IActionResult> Logout()
{
await HttpContext.Authentication.SignOutAsync("Cookie"); return RedirectToAction("Index", "Home");
}
public class LoginViewModel
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; } }
@model Practice.WebClient.Models.LoginViewModel
@{
ViewData["Title"] = "Login";
} <h2>登录</h2>
@using (Html.BeginForm("Login", "Account", new { returnUrl = ViewBag.ReturnUrl }, FormMethod.Post))
{
@Html.AntiForgeryToken() <!-- 登录框 -->
<div class="loginBox loginAndReg">
<h3>账号登入</h3>
<span style="color:red"> @Html.ValidationSummary(true, "")</span>
<p class="userName">
<span class="icon"><i></i></span>
<label>
@Html.TextBoxFor(m => m.Username, new { @placeholder = "请输入登录账号", @class = "changeInput" })
<em class="clean"></em>
</label> </p>
<p class="userPassword">
<span class="icon"><i></i></span>
<label>
@Html.PasswordFor(m => m.Password, new { @placeholder = "请输入登录密码", @class = "changeInput" })
<em class="clean"></em>
</label>
</p>
<button type="submit" class="loginBtn" id="inputLogin">登 录</button>
</div> }
Login.cshtml
@{
ViewData["Title"] = "账户中心";
}
<h2>账户中心</h2>
<h2>Claim:</h2>
<dl>
@foreach (var claim in User.Claims)
{
<dt>@claim.Type</dt>
<dd>@claim.Value</dd>
}
</dl>
Index.cshtml
.Net Core:身份认证组件的更多相关文章
- .Net Core身份认证:IdentityServer4实现OAuth 2.0 客户端模式 - 简书
原文:.Net Core身份认证:IdentityServer4实现OAuth 2.0 客户端模式 - 简书 一.客户端模式介绍 客户端模式(Client Credentials Grant)是指客户 ...
- 深入解读 ASP.NET Core 身份认证过程
长话短说:上文我们讲了 ASP.NET Core 基于声明的访问控制到底是什么鬼? 今天我们乘胜追击:聊一聊ASP.NET Core 中的身份验证. 身份验证是确定用户身份的过程. 授权是确定用户是否 ...
- Core身份认证
Core中实现一个基础的身份认证 注:本文提到的代码示例下载地址> How to achieve a basic authorization in ASP.NET Core 如何在ASP.NET ...
- .NET 黑魔法 - asp.net core 身份认证 - Policy
身份认证几乎是每个项目都要集成的功能,在面向接口(Microservice)的系统中,我们需要有跨平台,多终端支持等特性的认证机制,基于token的认证方式无疑是最好的方案.今天我们就来介绍下在.Ne ...
- ASP.NET Core 身份认证 (Identity、Authentication)
Authentication和Authorization 每每说到身份验证.认证的时候,总不免说提及一下这2个词.他们的看起来非常的相似,但实际上他们是不一样的. Authentication想要说明 ...
- asp.net core 身份认证/权限管理系统简介及简单案例
如今的网站大多数都离不开账号注册及用户管理,而这些功能就是通常说的身份验证.这些常见功能微软都为我们做了封装,我们只要利用.net core提供的一些工具就可以很方便的搭建适用于大部分应用的权限管理系 ...
- .Net Core身份认证:IdentityServer4实现OAuth 2.0 客户端模式
一.客户端模式介绍 客户端模式(Client Credentials Grant)是指客户端直接向认证服务(Authorization Server)发送认证请求,获取token,进行认证,一般适用于 ...
- Aspen.net core 身份认证
- .Net Core 授权系统组件解析
前面关于.Net Core如何进行用户认证的核心流程介绍完毕之后,.Net Core 认证系统之Cookie认证源码解析远程认证暂时不介绍,后期有时间,我会加上.接下去介绍认证组件是如何和认证组件一起 ...
随机推荐
- 一篇采访窥C#的未来
今天坐公交时用手机打开 .NET Blog 阅读这周的 The week in .NET ,在看 Virtual Panel: What's Next for .NET? 这篇采访报道时,被其中对 R ...
- MySQL的sql语言分类DML、DQL、DDL、DCL、
MySQL的sql语言分类DML.DQL.DDL.DCL. SQL语言一共分为4大类:数据定义语言DDL,数据操纵语言DML,数据查询语言DQL,数据控制语言DCL 1.数据定义语言DDL(Data ...
- [No0000F4]C# 枚举(Enum)
枚举是一组命名整型常量.枚举类型是使用 enum 关键字声明的. C# 枚举是值数据类型.换句话说,枚举包含自己的值,且不能继承或传递继承. 声明 enum 变量 声明枚举的一般语法: enum &l ...
- Python:time模块、calendar模块
time模块 import time 获取时间戳 >>>time.time() #1532418950.7246091 获取时间元组 >>> time.localt ...
- regular expression (如何用Sed和正则表达式提取子字符串)
echo "mv u3_yunying.war u3_yunying.war_`date +%Y%m%d%H%M`" | sed "s/\(mv\) \(\w*.wa ...
- js Dom对象的属性与方法
1.对象集合: (1).all[]; (2).images[]; (3).anchors[]; (4).forms[]; (5).links[]; ...
- Blender 使用
教程: 1.https://www.youtube.com/watch?v=N8-mE-165b8&index=7&list=PLE885296A496C3D38 快捷键: http: ...
- js如何判断哪个按钮被点击了?
用事件委托,然后判断target,代码如下: $(docuement).on('click',function(event){ event.target... }) 例如:点击.c1之外任意地方的时候 ...
- ab压力测试工具的使用
一.下载稳定版2.2.31 http://httpd.apache.org/ 二.2.2.*和2.4.*区别? httpd-2.2.x(prefork) httpd-2.4.x(event) 编 ...
- 20165336 预备作业3 Linux安装及学习
Linux 安装及学习 一.VirtualBox和Ubuntu的安装 依照老师所给的步骤下载了VirtualBox 5.2.6和Ubuntu 16.04.3. 按照步骤一步一步进行了安装,出现的问题有 ...