You are on page 1of 16

Coding24 单元 10- 身份认证及授权

学习内容 :

1. ASP.NET Core 的认证及授权


实作 1- 用户认证授权实作

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


1
1. ASP.NET Core 的认证及授权

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


2
认证及授权概述
认证( Authentication )
○ 认证是应用系统识别访问者身份的一个过程。当应用系统接收到浏览器的请求
后,会根据请求中携带的一些用户的的关键信息来识别用户的身份,认证通过
后会将用户信息存储,以便后续业务使用及授权流程中使用。
○ ASP.NET Core 常将认证信息加密后存储到 cookie 中,访问页面时发送到应用
系统去识别访问者的身份,也就是经典的 Cookie 认证。

授权( Authorization )
○ 授权是确定当前访问用户是否具备访问某个系统资源权限的过程。
○ 通常通过 [Authorize] 特性来标识。

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


3
认证及授权的方式
在 Program.cs 中
using Microsoft.AspNetCore.Authentication.Cookies;
// … 步骤 1 -指定认证方式
// 声明增加认证方式,使用 Cookie 认证
builder.Services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme
).AddCookie(options => {
options.Cookie.HttpOnly = true; // 只能透过 http 协定来访问 cookie
options.LoginPath = new PathString(“/Home/Login”); // 未登录时重导到 Login 动作方

options.LogoutPath = new PathString(“/Home/Index”); // 登出时重导到 Index 动作方法
options.AccessDeniedPath = new PathString(“/Home/Error”); // 拒绝访问时到 Error 方
法 步骤 2 -启用认证与授
}); 权
var app = builder.Build(); (三者顺序不可颠倒)
app.UseCookiePolicy(); // 启用 cookie 策略
app.UseAuthentication(); // 启用身分认证
app.UseAuthorization();
Learn ASP.NET // 启用授权功能
Core 6 MVC-v0.9 – http://www.coding24.org
4
ASP.NET Core 的认证及授权
使用 [Authorize] 属性标注方式,对 Controller 和 Action Method 进行授
权。 步骤 3 -指定授权
[Authorize] 范例 1
public IActionResult Index() //Index 动作方法须用户通过认证才能调用
{
//….
return View();
}

[Authorize] //HomeController 的 index 和 Delete 都需要通过认证才能调用 范例 2


public HomeController:Controller {
public IActionResult Index() { //…. }
public IActionResult Delete() { //…. }
}

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


5
ASP.NET Core 的认证及授权
[Authorize] 范例 3
public HomeController:Controller {
public IActionResult Index() { //…. } index 和 Delete 都需要通过认证才
能调用
public IActionResult Delete() { //…. }

[AllowAnonymous]
public IActionResult Login() { //… } Login 方法允许不用认证可调用
}

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


6
ASP.NET Core 的认证及授权
授权也可指定用户的角色,给予不同的权限。

[Authorize(Roles=“Admin, Member”)] 范例 4
public HomeController:Controller {
public IActionResult Index() { //…. } 具 Admin 角色用户可调用 Index,
Delete 动作方法。
[Authorize(Roles=“Admin”)] 具 Member 角色用户可周用
Index, Login 动作方法
public IActionResult Delete() { //…. }

[AllowAnonymous] 未认证用户可调用 Login 方法


public IActionResult Login() { //… }
}

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


7
ASP.NET Core 的认证及授权
步骤 4 -撰写登录登出代
if (member != null) {
// 建立身份声明 码
List<Claim> claims = new List<Claim> {
new Claim(ClaimTypes.Name, member.UId),
new Claim(ClaimTypes.Role, member.Role) };

// 建立身份识别对象 , 并指定账号与角色
var claimsIndentity = new ClaimsIdentity(claims,
CookieAuthenticationDefaults.AuthenticationScheme);
var authProperties = new AuthenticationProperties { IsPersistent = true };

// 进行登录动作 , 并带入身份识别对象

HttpContext.SignInAsync(CookieAuthenticationDefaults.AuthenticationScheme,
new ClaimsPrincipal(claimsIndentity), authProperties);
//RedirecToAction 的第 1 参数为动作方法 , 第 2 参数为控制器
// 注销则调用 // 因此下行会按用户的角色重定向至 AdminController 或 MemberController
HttpContext.SignOutAsync(); return RedirectToAction("Index", member.Role);
}

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


8
ASP.NET Core 的认证及授权 步骤 5 -判断身份状态
判断用户是否已登录
if (User.Identity.IsAuthenticated)
{
// 进行已登录的处理
}

取得登录用户的帐号
string uid = User.Identity.Name
注 : 若用户尚未登录则会回传
null ,导致上面语句发生 Exception

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


9
实作 1- 用户认证授权实作

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


10
实作 1- 用户认证授权实作
说明:创建一个 ASP.NET Core MVC 应用,并加上用户的认证及授权机
制。
步骤:
1. 使用 VS 创建项目,类型:「 ASP.NET Core 空」,项目 / 方案名为 Lab-DoubleA ,位置 :
工作目录 , 如 C:\Labs
2. 框架 : .NET6.0, 余采默认,建立项目。
3. 修改 Program.cs ,添加 Cookie 认证方式并启用相关功能或策略。代码详如下备注稿。
4. 在项目上添加 Models 文件夹,并添加模型 Member 表示会员,同时添加 MemberList 类以
构造出至少
public class3 Member
位会员(因本项目未用数据库故如此),模型代码详如备注稿。
{ Member.cs
public string UId { get; set; }
public string Password { get; set; }
public string Role { get; set; }
}

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


11
实作 1- 用户认证授权实作
5. 添加 Controllers 文件夹,并添加3个控制器:
HomeController: 显示首页并处理登录认证
MemberController: 允许具 Member 及 Admin 角色的用户调用 .
AdminController: 仅允许具 Admin 角色的用户调用 .
(控制器代码如下备注稿)

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


12
实作 1- 用户认证授权实作
6. 为各个动作方法添加对应的 View :
Home/Index.cshtml: 显示首页并呈现登录表单
Member/Index.cshtml: 具 Member 及 Admin 角色的用户登录成功后的后台页
面.
Admin/Index.cshtml: 具 Admin 角色的用户登录成功后的后台页面 .
( View 代码如下备注稿)

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


13
实作 1- 用户认证授权实作

账密
错误

会员
首页

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


14
实作 1- 用户认证授权实作

管理
首页

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


15
单元小结
本单元对 ASP.NET Core 的认证及授权先做一番概述以区别证
认与授权的不同。
操作 ASP.NET Core 的认证及授权大致可分为 5 个步骤:在
Program.cs 中指定认证方式、并启用认证与授权、对控制器或
动作方法指定授权、撰写登录登出代码,并透过身份信息的取
得以运行相应的程序。
最后透过一个用户认证授权实作小项目使读者了解代码的实
现。

Learn ASP.NET Core 6 MVC-v0.9 – http://www.coding24.org


16

You might also like