2.8 安全

  • 认证 VS 授权
  • ASP .NET Core 认证授权中间件
  • 认证
  • JWT 认证
  • 授权

认证 VS 授权

  • 认证是一个识别用户是谁的过程
  • 授权是一个决定用户可以干什么的过程
  • 401 Unauthorized 未授权
  • 403 Forbidden 禁止访问

ASP .NET Core 认证授权中间件

在接收到请求之后,认证(Authentication)和授权(Authorization) 发生在 路由(Routing) 和 终结点(Endpoint) 之间

执行过程

认证

认证是一个识别用户是谁的过程

代码示例

Web api jwt authentication

在 LighterApi 项目的 Startup.cs 中配置添加服务

ConfigureServices

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddJwtBearer(
options => options.TokenValidationParameters = new TokenValidationParameters
{
ValidateIssuer = true, // 是否验证 Issuer
ValidateAudience = true, // 是否验证 Audience
ValidateLifetime = true, // 是否验证失效时间
ClockSkew = TimeSpan.FromSeconds(30),
ValidateIssuerSigningKey = true, // 是否验证 SecurityKey
ValidAudience = "https://localhost:6001",
ValidIssuer = "https://localhost:6001",
IssuerSigningKey =
new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secret88secret666")) // 拿到 SecurityKey
});

Configure

app.UseAuthentication();
app.UseAuthorization();

添加标签 [Authorize]

[Authorize]
public class ProjectController : ControllerBase

通过 postman 调用接口,返回 401 Unauthorized

需要通过登录接口获取 token,再带上 token 访问

JWT 认证

  • 什么是 JWT
  • 颁发 token 代码示例

什么是 JWT

JWT 是一个 token,由三部分组成,格式为 xxx.yyy.zzz

  • Header(algorithm + type)
  • Payload(claims)
  • Singature

颁发 token 代码示例

namespace LighterApi.Controller
{
[ApiController]
[Route("api/[controller]")]
public class IdentityController : ControllerBase
{
[HttpPost]
[Route("signin")]
public IActionResult SignIn()
{
var securityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes("secret88secret666"));
var credentials = new SigningCredentials(securityKey, SecurityAlgorithms.HmacSha256); var token = new JwtSecurityToken(
issuer: "https://localhost:6001",
audience: "https://localhost:6001",
new List<Claim> {new Claim("name", "mingson")},
expires: DateTime.Now.AddMinutes(120),
signingCredentials: credentials); return Ok(new JwtSecurityTokenHandler().WriteToken(token));
}
}
}

启动程序,访问接口,获取 token

通过官网解析

带上 token 访问接口

授权

为接口添加访问需要的角色,具备角色才能访问

[Authorize(Roles = "Administrators, Mentor")]

SignIn 接口返回 token 中加入角色

new Claim(ClaimTypes.Role, "Administrators"),

启动程序,获取包含角色的 token

带上 token 访问需要角色的接口

GitHub源码链接:

https://github.com/MINGSON666/Personal-Learning-Library/tree/main/ArchitectTrainingCamp/LighterApi

.NET 云原生架构师训练营(模块二 基础巩固 安全)--学习笔记的更多相关文章

  1. .NET 云原生架构师训练营(建立系统观)--学习笔记

    目录 目标 ASP .NET Core 什么是系统 什么是系统思维 系统分解 什么是复杂系统 作业 目标 通过整体定义去认识系统 通过分解去简化对系统的认识 ASP .NET Core ASP .NE ...

  2. .NET 云原生架构师训练营(对象过程建模)--学习笔记

    目录 UML OPM OPM优化 UML 1997年发布UML标准 主要域 视图 图 主要概念 结构 静态视图 类图 类.关联.泛化.依赖关系.实现.接口 用例视图 用例图 用例.参与者.关联.扩展. ...

  3. .NET 云原生架构师训练营(设计原则&&设计模式)--学习笔记

    目录 设计原则 设计模式 设计原则 DRY (Don't repeat yourself 不要重复) KISS (Keep it stupid simple 简单到傻子都能看懂) YAGNI (You ...

  4. .NET 云原生架构师训练营(责任链模式)--学习笔记

    目录 责任链模式 源码 责任链模式 职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无需关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了 何时使用:在处理 ...

  5. .NET 云原生架构师训练营(模块一 架构师与云原生)--学习笔记

    目录 什么是软件架构 软件架构的基本思路 单体向分布式演进.云原生.技术中台 1.1 什么是软件架构 1.1.1 什么是架构? Software architecture = {Elements, F ...

  6. .NET 云原生架构师训练营(权限系统 RGCA 架构设计)--学习笔记

    目录 项目核心内容 实战目标 RGCA 四步架构法 项目核心内容 无代码埋点实现对所有 API Action 访问控制管理 对 EF Core 实体新增.删除.字段级读写控制管理 与 Identity ...

  7. .NET 云原生架构师训练营(模块二 基础巩固 敏捷开发)--学习笔记

    2.7.1 敏捷开发 敏捷介绍 敏捷的起源 敏捷软件开发宣言 敏捷开发十二原则 生命周期对比 敏捷开发的特点 敏捷的发展 敏捷的核心 敏捷的起源 2001年,17个老头子在一起一边滑雪,一边讨论工作, ...

  8. .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 介绍和基础)--学习笔记

    2.5.1 MongoDB -- 介绍 mysql vs mongo 快速开始 mysql vs mongo 对比 mysql mongo 数据存储 table 二维表结构,需要预先定义结构 json ...

  9. .NET 云原生架构师训练营(模块二 基础巩固 MongoDB 问答系统)--学习笔记

    2.5.6 MongoDB -- 问答系统 MongoDB 数据库设计 API 实现概述 MongoDB 数据库设计 设计优化 内嵌(mongo)还是引用(mysql) 数据一致性 范式:将数据分散到 ...

  10. .NET 云原生架构师训练营(模块二 基础巩固 Scrum 团队)--学习笔记

    2.7.3 Scrum 团队 理想的环境 团队章程 如何组建 Scrum 团队 产品待办事项列表 用户故事 敏捷开发流程 理想的环境 5-9人 100% 跨职能 在一起 自组织 自组织 目标 授权 沟 ...

随机推荐

  1. Golang之垃圾回收

    本篇主要是参考了: http://legendtkl.com/2017/04/28/golang-gc/ 说是参考,但其实基本上是原封不动. GC算法简介: 1. 引用计数 引用计数的思想非常简单:每 ...

  2. hbase远程api调用, 远程连接开发,环境构建相关问题总结

    平时在开发的过程中,都是将hbase的环境装在虚拟机或者双系统上的,开发是直接在unix或者linux上进行的,这样对于使用上,有些繁琐. 下面我将介绍我在使用windows远程开发过程中的一些总结: ...

  3. 制作MySQL的Windows服务+创建用户及授权

         在上一篇随笔中详述了MySQL的Windows 64位版本的安装,以及初始化操作.启动服务端.客户端连接.一些基本的文件操作等.然而在进行这些操作的时候,需要我们去输入一长串的路径和命令才能 ...

  4. HTML学习速记

    HTML结构导图 先看HTML结构示意图 本文主要讲解HTML当中的一些html标签,css样式,javascript方法 html html的标签有各式各样的数不胜数,但是常用的并不多,总结下我目前 ...

  5. Failed to initialize policy for cpu: 0

    今天在使用vmware安装ubuntu16.04的时候出现下列错误: Failed to initialize policy for cpu: 0 (-19),刚开始还以为是镜像文件出现了问题,结果发 ...

  6. FZU1894 志愿者选拔

    Problem Description 世博会马上就要开幕了,福州大学组织了一次志愿者选拔活动.参加志愿者选拔的同学们排队接受面试官们的面试.参加面试的同学们按照先来先面试并且先结束的原则接受面试官们 ...

  7. Educational Codeforces Round 96 (Rated for Div. 2) E. String Reversal (思维,逆序对)

    题意:给你一个字符串,每次可以调换现字符串的相邻两个字符,问最少操作多少次使得这个字符串等于其反转过来的字符串. 题解:先考虑字符串中没有相同字符的情况,那么我们每次将目前字符串的最后一个字符一直调换 ...

  8. kubernetes实战-交付dubbo服务到k8s集群(三)安装配置maven和java运行时环境的底包镜像

    maven 官方地址: 官方地址 下载maven,shdd7-200 # cd /opt/src # wget https://archive.apache.org/dist/maven/maven- ...

  9. 操作系统 part4

    1.操作系统的启动 CPU加电后,执行BIOS(基本IO处理系统).BIOS会进行硬件的自检和初始化,然后把加载程序(BootLoader)从磁盘上的引导扇区中加载到指定位置0x7c00.然后控制权交 ...

  10. Netty(四)基于Netty 的简易版RPC

    3.1 RPC 概述 下面的这张图,大概很多小伙伴都见到过,这是 Dubbo 官网中的一张图描述了项目架构的演进过程 它描述了每一种架构需要的具体配置和组织形态.当网站流量很小时,只需一个应用,将所有 ...