.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认证源码解析远程认证暂时不介绍,后期有时间,我会加上.接下去介绍认证组件是如何和认证组件一起 ...
随机推荐
- ipv6禁用导致rpcbind服务启动失败解决办法
参考文档:http://blog.51cto.com/hld1992/2055028
- Error creating bean with name 'eurekaAutoServiceRegistration'
spring-boot项目不断重启,报错: org.springframework.beans.factory.BeanCreationNotAllowedException: Error creat ...
- [No0000FA]C# 接口(Interface)
接口定义了所有类继承接口时应遵循的语法合同.接口定义了语法合同 "是什么" 部分,派生类定义了语法合同 "怎么做" 部分. 接口定义了属性.方法和事件,这些都是 ...
- [No0000E8]C# 方法 参数传递
参数传递 当调用带有参数的方法时,您需要向方法传递参数.在 C# 中,有三种向方法传递参数的方式: 方式 描述 值参数 这种方式复制参数的实际值给函数的形式参数,实参和形参使用的是两个不同内存中的值. ...
- tensorflow模型在实际上线进行预测的时候,使用CPU工作
最近已经训练好了一版基于DeepLearning的文本分类模型,TextCNN原理.在实际的预测中,如果默认模型会优先选择GPU那么每一次实例调用,都会加载GPU信息,这会造成很大的性能降低. 那么, ...
- confd template src格式和 templates 语法
Template Resources Template resources are written in TOML and define a single template resource. Tem ...
- Ubuntu16.04开机蓝屏问题解决
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- python fabric实现远程操作和部署示例
https://www.jb51.net/article/48434.htm 近期接手越来越多的东西,发布和运维的工作相当机械,加上频率还蛮高,导致时间浪费还是优点多.修复bug什么的,测试,提交版本 ...
- Java+selenium 如何定位下拉框select
场景:需要进行下拉选择定位元素. 一.select菜单 select也是比较常见的,selenium封装了以下方法, 创建select WebElement selector = dr ...
- swift 桥接 Bridging 的创建和使用
swift编程时,大概率会用到OC的文件,这时就要使用swift与oc的桥接文件.桥接文件以 XXXX-Bridging-header.h 这样子的文件名形式为标准,XXXX是你的项目名字. 具体 ...