前言

在 Identity – Authorize 有介绍过, Identity 的验证核心是 Claims.

在 Identity – Without Identity Framework 也看到了 Claims 是怎样创建的.

这篇看看 Identity 如何帮助我们撞见 Claims 和我们要如何去扩展它.

Identity Role Claims

Identity role claims 的结构是这样的

 

User 有 claims, User 有 roles, Role 有 claims

所以最后 Principal 的 claims 就等于 user's claims + user 所以 role's claims

Custom Permission Claims

假设我们的需求是这样. Role 被授权 "Create Product", "Read Product", "Update Product", "Delete Product"

我们希望做一个 Permission Claims 要怎么搞呢?

做多一个表记入授权的信息 (这只是一个 example 不用纠结它业务的合理性哦)

然后实现一个 UserClaimsPrincipalFactory

Identity 会在创建 principal 的时候调用它.

public class MyUserClaimsPrincipalFactory : UserClaimsPrincipalFactory<IdentityUser>
{
public MyUserClaimsPrincipalFactory(UserManager<IdentityUser> userManager, IOptions<IdentityOptions> optionsAccessor) : base(userManager, optionsAccessor)
{
} protected override async Task<ClaimsIdentity> GenerateClaimsAsync(IdentityUser user)
{
var claims = await base.GenerateClaimsAsync(user);
claims.AddClaim(new Claim ("MyClaim2", "MyClaim2Value"));
return claims;
}
}

然后在 Startup.cs 添加 service scoped 就可以了

builder.Services.AddScoped<IUserClaimsPrincipalFactory<IdentityUser>, MyUserClaimsPrincipalFactory>();

检查

public async Task OnGet()
{
var claims = User.Claims.ToList();
if (User.HasClaim(ClaimTypes.Role, "Super User")) // http://schemas.microsoft.com/ws/2008/06/identity/claims/role
{ }
if (User.HasClaim(c => c.Type == "MyClaim2"))
{ }
}

Identity – Permission Claims & UserClaimsPrincipalFactory的更多相关文章

  1. Cookies, Claims and Authentication in ASP.NET Core(转载)

    Most of the literature concerning the theme of authentication in ASP.NET Core focuses on the use of ...

  2. Web API 基于ASP.NET Identity的Basic Authentication

    今天给大家分享在Web API下,如何利用ASP.NET Identity实现基本认证(Basic Authentication),在博客园子搜索了一圈Web API的基本认证,基本都是做的Forms ...

  3. ASP.NET Core Identity 实战(3)认证过程

    如果你没接触过旧版Asp.Net Mvc中的 Authorize 或者 Cookie登陆,那么你一定会疑惑 认证这个名词,这太正式了,这到底代表这什么? 获取资源之前得先过两道关卡Authentica ...

  4. IdentityServer4结合AspNetCore.Identity实现登录认证踩坑填坑记录

    也可以自定义实现,不使用IdentityServer4.AspNetIdentity这个包,当然还要实现其他接口IResourceOwnerPasswordValidator. IProfileSer ...

  5. Owin+ASP.NET Identity浅析系列(一)用户登录注册

    在今天,读书有时是件“麻烦”事.它需要你付出时间,付出精力,还要付出一份心境.--仅以<Owin+ASP.NET Identity浅析系列>来祭奠那逝去的…… 使用VS2015创建MVC项 ...

  6. MVC6 OWin Microsoft Identity 自定义验证

    1. Startup.cs中修改默认的验证设置 //app.UseIdentity(); app.UseCookieAuthentication(options => { //options.A ...

  7. asp.net core 2.0 web api基于JWT自定义策略授权

    JWT(json web token)是一种基于json的身份验证机制,流程如下: 通过登录,来获取Token,再在之后每次请求的Header中追加Authorization为Token的凭据,服务端 ...

  8. ASP.NET Core 实战:基于 Jwt Token 的权限控制全揭露

    一.前言 在涉及到后端项目的开发中,如何实现对于用户权限的管控是需要我们首先考虑的,在实际开发过程中,我们可能会运用一些已经成熟的解决方案帮助我们实现这一功能,而在 Grapefruit.VuCore ...

  9. Ocelot统一权限验证

    Ocelot作为网关,可以用来作统一验证,接上一篇博客,我们继续 前一篇,我们创建了OcelotGateway网关项目,DemoAAPI项目,DemoBAPI项目,为了验证用户并分发Token,现在还 ...

  10. ASP.NET Core WebAPI中使用JWT Bearer认证和授权

    目录 为什么是 JWT Bearer 什么是 JWT JWT 的优缺点 在 WebAPI 中使用 JWT 认证 刷新 Token 使用授权 简单授权 基于固定角色的授权 基于策略的授权 自定义策略授权 ...

随机推荐

  1. 面试官:Dubbo一次RPC请求经历哪些环节?

    大家好,我是三友~~ 今天继续探秘系列,扒一扒一次RPC请求在Dubbo中经历的核心流程. 本文是基于Dubbo3.x版本进行讲解 一个简单的Demo 这里还是老样子,为了保证文章的完整性和连贯性,方 ...

  2. php页面调用微信扫一扫

    function.php <?php define("appID", "微信公众号appId"); define("appsecret" ...

  3. leetcode中等(字符串):[3, 6, 8, 49, 179, 299, 524, 539, 609, 648]

    目录 3. 无重复字符的最长子串 6. Z 字形变换 8. 字符串转换整数 (atoi) 49. 字母异位词分组 179. 最大数 299. 猜数字游戏 524. 通过删除字母匹配到字典里最长单词 5 ...

  4. Vue禁止用户复制文案 + 兼容 IE

    vue必须要加载完才可以操作dom,或者在mounted和created时使用this.$nextTick方法,使dom生成后进行相关操作. created() { this.$nextTick(() ...

  5. [oeasy]python0135_python_语义分析_ast_抽象语法树_abstract_syntax_tree

    语义分析_抽象语法树_反汇编 回忆 上次回顾了一下历史 python 是如何从无到有的 看到 Guido 长期的坚持和努力   ​   添加图片注释,不超过 140 字(可选)   python究竟是 ...

  6. [oeasy]python0035_ 整合shell编程_循环_延迟_清屏

    ​ 整合shell编程 回忆上次内容 用\r 可以让输出位置回到行首 原位刷新时间 如果想要的是大字符效果 需要使用 figlet 但同时还希望能刷新 ​ 编辑 这可能吗? 建立脚本 我们得熟悉一下s ...

  7. oeasy教您玩转vim - 66 - # 比较修改模式 vimdiff

    ​ vimdiff 回忆上次 上次有三种批量替换,分别是 :windo :bufdo :argdo 执行的{cmd}可以用|按顺序增加 update 自动更新 :set autowrite 自动写入 ...

  8. 错误记录java: JDK isn't specified for module

    跑苍穹外卖的时候遇到了 java: JDK isn't specified for module 'sky-pojo'这一问题 解决办法是通过修改JDK版本,这个项目用的springboot比较早,可 ...

  9. Java--普通方法重载

    [转载自本科老师上课课件] 调用一个重载过的方法时,Java编译程序是如何确定究竟应该调用哪一个方法?以下代码定义了三个重载方法: public void f(char ch){ System.out ...

  10. 【Quartz】

    一.Quartz概述 Quartz是用来做定时任务调度的JavaEE框架 需求场景: 1.在每个月末,自动网易云会员续费,或者百度云盘会员续费 2.在迅雷下载完一个超过10G的资源的30秒之后自动关机 ...