前言

在 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. 转载 | win11右键菜单改为win10的bat命令(以及恢复方法bat)

    原文来自这里:https://blog.51cto.com/knifeedge/5340751 版权归:IT利刃出鞘 本质上就是写入注册表. 一.右键菜单改回Win10(展开) 1. 新建文件:win ...

  2. apache ab.exe压力测试

    ab.exe是一个性能检测工具,是apache server中的一个小组件,使用简单,方便     下载地址:http://files.cnblogs.com/files/gossip/ab.zip ...

  3. 数据结构:Deuque

    #include <iostream> #include <stdio.h> #include <string> using namespace std; stru ...

  4. 记一次NACOS开放公网访问导致服务器被挖矿的解决流程 [kdcflush] acosd

    前言 事情的起因是这样的,昨天领导找到我说服务器内存满了,影响其他程序正常运行了,让我把测试服务器上之前启动的六个JAVA程序停一下,接着我就登上服务器执行docker compose down把服务 ...

  5. (六)Redis 消息队列 List、Streams

    Redis 适合做消息队列吗?有什么解决方案?首先要明白消息队列的消息存取需求和工作流程. 1.消息队列 我们一般把消息队列中发送消息的组件称为生产者,把接收消息的组件称为消费者,下图是一个通用的消息 ...

  6. vue 路由缓存 keep-alive include和exclude无效

    <keep-alive :include="keepAliveData"> <router-view v-if="isShowRouter" ...

  7. HIC simple process

    1,什么是Hic数据? Hi-C是研究染色质三维结构的一种方法.Hi-C技术源于染色体构象捕获(Chromosome Conformation Capture, 3C)技术,利用高通量测序技术,结合生 ...

  8. Kotlin 字符串教程:深入理解与使用技巧

    Kotlin 字符串 字符串用于存储文本. 字符串包含由双引号包围的字符集合: 示例 var greeting = "Hello" 与 Java 不同,您不必指定变量是字符串.Ko ...

  9. ArcGIS for Android入门(Java):ViewPage + Fragment 底部导航栏添加地图

    修改为ViewPage + Fragment 可以参考里面runoob的教程:我也是参考这个修改的:这前面的网上都有很多相应的教程,我觉得这一部分的难点主要是在Fragment里面加载地图: 在fra ...

  10. URDF使用语法【万字解析赶紧码住】 —— 机器人统一描述文件格式(Unified Robot Description Format)

    原文地址: https://zhuanlan.zhihu.com/p/665269288 具体内容略,请参照原文.