前言

身份验证: Authentication

授权: Authorization

net core 中的身份验证和授权这两个部分,是相辅相成的。当初我在学在部分的时候,是看的 net core 官网中的教程。得益于微软的翻译,看得我是难受至极,愣是没看明白。

在后来,我通过别的路劲学懂这两个部分之后,我再来看官网,看懂一点了。

所以,我根据我自己的理解,写下了这个身份验证和授权的简单教程,希望能够帮到你吧。

在本文中,只介绍身份验证和授权的概念性的东西,还不会涉及到具体的代码编写,毕竟,只有明白了是什么,才能知道怎么做。所以本文的目的,在于让你明白什么是身份验证和授权,至于代码编写,将在下一篇文章中展示。

明确概念

在前言中我说身份验证和授权这两个部分,是相辅相成的,我们必须先了解这两者的关系,才能知道怎么使用。

如果把我们的项目比作是一栋大楼,把项目中的接口比作是大楼中的房间,我们请求接口就是要到大楼中的某个房间里去。那么有的房间是机密房间,不能谁想进就进,来人必须证明你的身份,并且你的身份有对应权限能进到这个房间。

其中,证明来者的身份,就是 身份验证-Authentication 做的事;你的身份的权限能不能进入到这个房间,就是 授权-Authorization 做的事。

你看,这两者的关系,必须要先进行身份验证才能进行授权,如果连身份验证都没有通过,就更别提授权了。

在身份验证通过后,要怎么将身份信息传递给授权呢?就需要用到声明:Claim,这个东西。

声明-Claim

“声明”这个中文翻译很迷惑,很让人疑惑它的用途,如果改成“条目”还更好一点。

这个东西是干什么的呢?在现实中,我们会使用各种证件来证明我们的身份,比如有身份证、驾驶证、社保卡等。各种证件中都会有一条条的条目来说明持有者的相关信息,如身份证中有名字:张三;性别:男;身份证号:xxxxxxx。这每一条相关信息,就是 声明

每一个声明都由两部分信息,一个是类型,一个值。比如:身份证中的名字这一条目,转换成声明,其类型就是“名字”,其值就是“张三”。

所以,声明-Claim 就代表了每个身份条目。

另外,在我们上面的例子中,每一种有条目的证件,叫做 ClaimsIdentity,就跟你的身份证、社保卡一样;多种证件的集合,叫做 ClaimsPrincipal,就跟你的证件包一样。

声明从哪里来

发起一个请求,经过了身份验证,得到了一个或多个声明。但是请求中这些声明是从哪里来的?总不可能是请求中凭空产生的吧。所以,在客户端携带上声明向服务器发起请求前,客户端必须先从服务器上得到声明。

好比说,不可能来个人说你是张三我就相信了,你必须携带有效证件,这个证件必须我给你发放才有效。

而最常见的发放接口其实就是登录接口啦。客户端在登录了之后就证明了它的身份,我就可以给他发放一个凭证了,客户端携带这个凭证来请求接口,经过身份验证程序,就能够知道它的声明是什么了。

声明,通过服务器下发凭证,请求其他接口时携带上凭证,经过身份验证程序而得到。得到声明后,将转交给授权程序使用。当然,也有其他的方式,但是这里为了简化概念,就从简单的声明讲起。至于其他的方式,在我们使用到的时候再提及。

授权如何使用声明

经过身份验证得到的各种声明,传递给了授权程序,授权程序就可以根据需要,来判断授权通不通过。我们这种根据声明的授权,叫做 基于声明的授权。当然也是有基于其他方式的授权的,为了简单,这里用声明来说明。

知道了这一点之后,你的授权程序,就可以根据自己的需求来编写了。如,你规定了只有持有 24 小时核酸的人才能进这个房间,那么你就要在他的声明里寻找类型为 “核酸” 的条目,如果能找到,且值是 24,就通过,准许进入!不然就一边去。

经过了授权程序后,会有两种结果,一种是通过,一种就是不通过。这个很好理解,通过的话,就会允许访问接口了;不通过的话,将会被拒绝访问。你还可以自己设定拒绝后的行为,比如你让它一边呆着去,或者让它去隔壁做个核酸再过来。

总结

至此,在本文中,我们知道了:

  1. 身份验证和授权的关系:需要先经过身份验证,拿到身份信息,才能进行授权。
  2. 在本文例子中,身份验证和授权的信息传递,通过声明来进行。
  3. 授权程序在根据声明进行授权判断后,有通过和不通过两种。
  4. 授权通过的话将允许访问对应的接口,不通过的话将被拒绝。

在下文中,我们将使用 cookie 来编写一个简单的身份验证和授权。

使用 cookie 的身份验证和授权

告辞!

学学dotnet core中的身份验证和授权-1-概念的更多相关文章

  1. 从零搭建一个IdentityServer——聊聊Asp.net core中的身份验证与授权

    OpenIDConnect是一个身份验证服务,而Oauth2.0是一个授权框架,在前面几篇文章里通过IdentityServer4实现了基于Oauth2.0的客户端证书(Client_Credenti ...

  2. 依赖注入在 dotnet core 中实现与使用:1 基本概念

    关于 Microsoft Extension: DependencyInjection 的介绍已经很多,但是多数偏重于实现原理和一些特定的实现场景.作为 dotnet core 的核心基石,这里准备全 ...

  3. 使用 cookie 的身份验证和授权

    前言 在上一章 学学 dotnet core 中的身份验证和授权-1-概念 中,我们大致明白了身份验证和授权两者的关系.那么在本文中,我们将使用 cookie 来做一个简单的身份验证和授权. 本文中我 ...

  4. asp.net core 3.x 身份验证-3cookie身份验证原理

    概述 上两篇(asp.net core 3.x 身份验证-1涉及到的概念.asp.net core 3.x 身份验证-2启动阶段的配置)介绍了身份验证相关概念以及启动阶段的配置,本篇以cookie身份 ...

  5. Azure Service Bus 中的身份验证方式 Shared Access Signature

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  6. 使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)——第1部分

    原文:使用JWT的ASP.NET CORE令牌身份验证和授权(无Cookie)--第1部分 原文链接:https://www.codeproject.com/Articles/5160941/ASP- ...

  7. asp.net core 3.x 身份验证-1涉及到的概念

    前言 从本篇开始将围绕asp.net core身份验证写个小系列,希望你看完本系列后,脑子里对asp.net core的身份验证原理有个大致印象.至于身份验证是啥?与授权有啥联系?就不介绍了,太啰嗦. ...

  8. asp.net core 3.x 身份验证-2启动阶段的配置

    注册服务.配置选项.添加身份验证方案 在Startup.ConfigureServices执行services.AddAuthentication() 注册如下服务(便于理解省略了部分辅助服务): s ...

  9. 用Retrofit发送请求中添加身份验证

    用Retrofit发送请求中添加身份验证====================在安卓应用开发中, retrofit可以极大的方便发送http网络请求,不管是GET, POST, 还是PUT, DEL ...

随机推荐

  1. hibernate 联合主键 composite-id

    如果表使用联合主键(一个表有两个以上的主键),你可以映射类的多个属性为标识符属性.如:<composite-id>元素接受<key-property> 属性映射(单表映射)和& ...

  2. 【转载】【zabbix】自定义监控项key值

    [转载]https://www.cnblogs.com/zhenglisai/p/6547402.html [zabbix]自定义监控项key值   说明: zabbix自带的默认模版里包括了很多监控 ...

  3. python版本共存与语法的注释

    python的多种版本共存 首先还是先下载python解释器除最高版本的另外两个版本 个人推荐的是 3.6.8和2.7.14 首先我电脑是win7系统 在计算机属性右键点开高级设置点击环境变量 将下载 ...

  4. C. Sum of Cubes

    原题链接 https://codeforces.com/problemset/problem/1490/C 题目 题意 如果一个数 n = x3 + y3 (x, y可以相等, 且> 0) 输出 ...

  5. gin框架使用【7.中间件使用】

    在 gin中,通过默认的函数,构建一个实现了带默认中间件的 *Engine. r := gin.Default() 默认绑定了Logger和Recovery中间件,帮助我们进行日志输出和错误处理. f ...

  6. Visual Studio2019 F5调试程序时选择文件后调试控制台进程关闭问题

    问题:Visual Studio2019 F5调试程序时选择文件后调试控制台进程关闭问题 解决方案: 修改Visual Studio 配置项 [工具]-[选项]-[项目和解决方案]-[Web项目]-[ ...

  7. 前端架构三大巨头之一Angular | 深度讲解

    云智慧集团成立于2009年,是全栈智能业务运维解决方案服务商.经过多年自主研发,公司形成了从IT运维.电力运维到IoT运维的产业布局,覆盖ITOM.ITOA.ITSM.DevOps以及IoT几大领域, ...

  8. 小米路由器3G R3G 刷入Breed和OpenWrt 20.02.2 的记录

    小米 R3G 参数 Architecture: MIPS Vendor: Mediatek Bootloader: U-Boot System-On-Chip: MT7621 family CPU/S ...

  9. C#中检查null的语法糖

    今天看到已经更新了devblogs,新增的C# 11的!!(用于检查null的语法)经过非常长的讨论,最后取消了.然后我又想起来null检查,这个可以说一说. 函数参数null检查 传统写法 写一个函 ...

  10. kafka从入门到了解

    kafka从入门到了解 一.什么是kafka Apache Kafka是Apache软件基金会的开源的流处理平台,该平台提供了消息的订阅与发布的消息队列,一般用作系统间解耦.异步通信.削峰填谷等作用. ...