文章目录

  • AspNetCore3.1_Secutiry源码解析_1_目录
  • AspNetCore3.1_Secutiry源码解析_2_Authentication_核心项目
  • AspNetCore3.1_Secutiry源码解析_3_Authentication_Cookies
  • AspNetCore3.1_Secutiry源码解析_4_Authentication_JwtBear
  • AspNetCore3.1_Secutiry源码解析_5_Authentication_OAuth
  • AspNetCore3.1_Secutiry源码解析_6_Authentication_OpenIdConnect
  • AspNetCore3.1_Secutiry源码解析_7_Authentication_其他
  • AspNetCore3.1_Secutiry源码解析_8_Authorization_核心项目
  • AspNetCore3.1_Secutiry源码解析_9_Authorization_Policy

概述

最近一直在学习研究认证授权这一块,从AspNetCore的Security解决方案,到Identity,再到OAuth2.0、OpenIdConnect协议,然后IdentityServer4,这一块的东西十分多而且复杂,可以算是DotNet里最难啃的骨头之一了。计划做个认证授权的系列,藉由分析源码来学习、记录和加深对这一块的理解。

如图是AspNetCore.Security解决方案的项目结构。

可以看到主要有5个解决方案文件夹

  • Authentication:认证
  • Authorization:授权
  • CookiePolicy:Cookie策略中间件
  • _dependencies:依赖项目
  • benchmarks:测试项目

最主要的是Authentication和Authorization这两个里面的内容。

什么是Authentication, 什么是Authorization

初次接触这一块,可能会比较懵,啥玩意儿啊,俩单词长得差不多像念绕口令的。

我尝试大白话解释下。

Authentication(认证):who are you。系统获知当前用户身份的过程就叫认证。可以类比成身份证。通常来说,在你登录的时候,系统就知道了你的身份,然后将当前用户信息加密后存储在Cookie中来维持登录态。

Authorization(授权):are you allowed。授权就是判断你有没有权限,比如网管拿着你身份证一看,你这不行,未满十八岁,不能在我这上网。而有的黑网吧是没有这个要求的,给钱就能玩。正经网吧和黑网吧,这就是需要授权资源和匿名资源的区别。

Authentication项目简介

我们可以看到第三个文件夹叫Core,里面只有一个项目叫Microsoft.AspNetCore.Authentication,是我们使用DotNet授权框架必须引用的一个核心类库。

然后其他的Certificate、Cookies、OAuth、OpenIdConnect等这些,在DotNet里叫做Schema,可以翻译为架构。这就好比,证明身份的方式有很多种,身份证、护照、户口本都可以,同理网络世界也有各种各样的协议。最常见传统的是方式是使用Cookie,也可以使用无状态的JwtBear,现在常见的微信、QQ等扫码登录是使用的OAuth协议。

Authorization项目简介

授权就两个项目,[Microsoft.AspNetCore.Authorization.Policy],[Microsoft.AspNetCore.Authorization]。多看看源码的话,应该对Policy这个词很熟悉了,在DotNet里面属于高频词汇,意思是策略。这两个项目允许设置不同的授权策略/规则,来实现高度灵活的授权方案。

最新文章

  1. 虚拟机linux上网问题
  2. 【CentOS】学习Bash
  3. iOS PCH文件
  4. 118. Pascal's Triangle
  5. java socket编程开发简单例子 与 nio非阻塞通道
  6. H5 浏览器开发文档
  7. iOS多线程编程之Grand Central Dispatch(GCD)介绍和使用
  8. Sql 邮件发送
  9. C# 调用系统winmm.dll 播放音乐wav mp3
  10. HTML xmlns
  11. 【数学】【NOIp2012】同余方程 题解 以及 关于扩展欧几里得与同余方程
  12. E=MC2 - 搜搜百科
  13. js动态加载的蒙板弹框
  14. elasticsearch2.3.3集群搭建踩到的坑
  15. MySQL 锁信息和事务
  16. LeetCode算法题-Arranging Coins(Java实现)
  17. ThreadPoolExecutor参数
  18. apply的“非改变this“的用法
  19. [BZOJ2117]Crash的旅游计划
  20. [label][JavaScript][The Defined Guide of JavaScript] 如何声明变量

热门文章

  1. 最小生成树 HihoCoder-1097、1098、1109(最小生成树算法)
  2. 升级本地已安装的 Node 和 npm 版本
  3. haproxy笔记之三:配置HAProxy详细介绍
  4. 植物基因组|注释版本问题|重测序vs泛基因组
  5. 流量全球第4的Reddit到底是一个怎样的网站?
  6. xshell 常用命令1
  7. 语言发展与python
  8. let和const区别
  9. ArrayList与LinkList对比
  10. frp端口映射穿透内网