理解ASP.NET Core验证模型(Claim, ClaimsIdentity, ClaimsPrincipal)不得不读的英文博文

理解ASP.NET Core验证模型(Claim, ClaimsIdentity, ClaimsPrincipal)不得不读的英文博文

大家好,又见面了,我是全栈君。

这篇英文博文是 Andrew Lock 写的 Introduction to Authentication with ASP.NET Core 。

以下是简单的阅读笔记:

———————————–

ASP.NET Core 的验证模型是 claims-based authentication 。Claim 是对被验证主体特征的一种表述,比如:登录用户名是…,email是…,用户Id是…,其中的“登录用户名”,“email”,“用户Id”就是ClaimType。

You can think of claims as being a statement about…That statement consists of a name and a value.

对应现实中的事物,比如驾照,驾照中的“身份证号码:xxx”是一个claim,“姓名:xxx”是另一个claim。

一组claims构成了一个identity,具有这些claims的identity就是 ClaimsIdentity ,驾照就是一种ClaimsIdentity,可以把ClaimsIdentity理解为“证件”,驾照是一种证件,护照也是一种证件。

ClaimsIdentity的持有者就是 ClaimsPrincipal ,一个ClaimsPrincipal可以持有多个ClaimsIdentity,就比如一个人既持有驾照,又持有护照。

————————————

理解了Claim, ClaimsIdentity, ClaimsPrincipal这三个概念,就能理解生成登录Cookie为什么要用下面的代码?

var claimsIdentity = new ClaimsIdentity(new Claim[] { new Claim(ClaimTypes.Name, loginName) }, "Basic");
var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
await context.Authentication.SignInAsync(_cookieAuthOptions.AuthenticationScheme, claimsPrincipal);

要用Cookie代表一个通过验证的主体,必须包含Claim, ClaimsIdentity, ClaimsPrincipal这三个信息,以一个持有合法驾照的人做比方,ClaimsPrincipal就是持有证件的人,ClaimsIdentity就是证件,”Basic”就是证件类型(这里假设是驾照),Claim就是驾照中的信息。 

转载于:https://www.cnblogs.com/dudu/p/6367303.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/108675.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • git部署到服务器上_git部署代码到服务器

    git部署到服务器上_git部署代码到服务器搭建Git服务器并感受hook使用通常情况下我们都是将项目托管到Github,Coding等服务商。如果你有一台自己的Linux云主机,在上面搭建Git服务器比想象中要简单的多。这篇文章讲解如何搭建Git服务器及使用git的hook机制(使用post-receive这个hook,在git服务器受到push请求,并且接受完代码提交时…文章飞凡的陀螺2018-04-22819浏览量Git远程仓库…

    2022年10月4日
    3
  • PCA9685–16路 PWM模块舵机驱动板–STM32 IIC接口模块[通俗易懂]

    PCA9685–16路 PWM模块舵机驱动板–STM32 IIC接口模块[通俗易懂]目录一、概述和硬件1、概述2、硬件1、电压2、i2c地址3、使能脚二、寄存器功能 MODE1寄存器外面调用的接口  PCA9685是一款基于IIC总线通信的12位精度16通道PWM波输出的芯片,该芯片最初由NXP推出时主要面向LED开关调光,16路12位PWM信号发生器,可用于控制舵机、led、电机等设备,i2c通信,节省主机资源。就是想控制好几…

    2025年6月8日
    3
  • python字符串处理方法

    python字符串处理方法一、combine&duplicate字符串结合和复制字符和字符串可以用来相加来组合成一个字符串输出;字符或字符串复制输出。二、Extract&Slice字符串提取和切

    2022年7月6日
    26
  • WPF中ListView排序

    WPF中ListView排序//后台代码privatevoidlvList_Click_1(objectsender,RoutedEventArgse){if(e.OriginalSourceisGridViewColumnHeader){//获得点击的列

    2022年10月3日
    1
  • php三个数从大到小排列_php常用的流程控制语句

    php三个数从大到小排列_php常用的流程控制语句<?php$a = rand(100,999);$b = rand(100,999);$c = rand(100,999);echo “a=”.”$a”.”<br>”;echo “b=”.”$b”.”<br>”;echo “c=”.”$c”.”<br>”;if(($a > $b ) && ($a > …

    2022年8月18日
    10
  • 软件测试流程五个阶段

    软件测试流程五个阶段软件测试按照研发阶段一般分为5个部分:单元测试、集成测试、确认测试、系统测试、验收测试,下面将不同阶段需要的一些工作内容做一下梳理希望可以帮助到大家。 //No.1//单元测试 单元测试又称为模块测试,是针对软件设计的最小单位程序模块进行正确性检查的测试工作,单元测试需要从程序内部结构出发设计测试用例,多个模块可以平行地独立进行单元测试。一、单元测试的内容: 1、模…

    2022年6月7日
    62

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号