1 Identity 介绍

2 授权系统

图1 体系结构

3 自定义 Attribute

自定义 Attribute 继承于 AuthorizeAttribute,AuthorizeAttribute 具有 Roles 与 Users 属性,如果直接使用则可以对角色和用户进行权限控制。在本体系中最终的权限校验落地于 Claim,Claim 具有公共属性如下:

名称

说明

ClaimType

Gets the Type of the current Claim.

Issuer

Gets the Issuer of the claim.

OriginalIssuer

Gets the original issuer of the claim.

Properties

Gets the collection of Properties that are name-value pairs.

Subject

Gets the Subject of the Claim.

Value

Gets the Value of the Claim.

ValueType

Gets the ValueType of the Claim.

选取 Issuer、ClaimType 和 Value 属性在权限验证时进行校验,可以根据实际情况选取合适校验属性。

在之前工作中,了解到 REST 风格 API,个人对其对目前 Web 现状提取的解决方式是比较认同的(不过那篇论文写了好多年),所有在权限验证时,同时校验了 HTTP 请求的 Method。

由此,自定义 Attribute (ClaimsAccessAttribute)具有以下属性:

访问权限

类型

属性名称

说明

public

string

Issuer

同上

public

string

ClaimType

同上

public

string

Value

同上

public

MethodType

MethodTypeValue

http method value

4 授权

传统的授权方式有给用户分配不同的角色,不同的角色具有若干的访问权限。但角色如何具有访问权限,有的系统使用菜单可见则可以访问,实际上并没有实现严格的权限验证,不过其可以满足普通企业应用权限要求。但是在这种设计过程中,硬编码比较严重,以及哪些方法可以是菜单(或者提供服务)没有明确的界限。

基于上述原因,便引入了自定义属性(ClaimsAccessAttribute),当决定将某个方法设置为菜单,则使用自定义属性修饰,并通过设置其属性来设定该菜单应当的权限(简单的理解此处权限等同于 Claim)。

Asp.Net Identity 的引入很大一部分原因是为了解决允许使用第三方授权登录系统(或使用服务),基于此,用户是可以直接关联 Claim,这样得到好处是允许向现有用户添加第三方 Claim,而不是必须根据第三方 Claim 创建用户(这样的好处仔细一想并没有实用),以及临时授权,再者动态权限(这块了解不多),但这种关联带来的灵活性是好的。

额外,通过反射可以很容易获取自定义的 Attribute,从而方便在权限认证。

5 系统实现 demo

实现代码地址:https://github.com/sangeren/IdentityMine

5.1 系统实现内容

(1)基于角色的权限管理

(2)自定义 ClaimsAccessAttribute ,并验证

5.2 系统存在问题

(1)controller 下的 action 分配权限,深层次的问题是 Claim 是预设,还是动态创建。预先设置给到的 claim 系统会比较好实现,但没有动态创建的灵活度高。最终应该是取决于具体的情形。

6 总结

这篇基本是2个月之前写的,中间一段时间有别的事情,再加上比较懒,然后一直没有公布。然后好多东西都忘记了(擦汗),不过我希望能在这个点上进行一点探讨,欢迎各位指出问题,不胜感激!

7 参考

【1】Microsoft msdn

还有几篇博客园的文章!

Asp.net Identity身份与权限体系设计的更多相关文章

  1. ASP.NET MVC 随想录——探索ASP.NET Identity 身份验证和基于角色的授权,中级篇

    在前一篇文章中,我介绍了ASP.NET Identity 基本API的运用并创建了若干用户账号.那么在本篇文章中,我将继续ASP.NET Identity 之旅,向您展示如何运用ASP.NET Ide ...

  2. ASP.NET Identity 身份验证和基于角色的授权

    ASP.NET Identity 身份验证和基于角色的授权 阅读目录 探索身份验证与授权 使用ASP.NET Identity 身份验证 使用角色进行授权 初始化数据,Seeding 数据库 小结 在 ...

  3. asp.net Core3.1自定义权限体系-菜单和操作按钮权限

    我们在做项目项目,经常会碰到权限体系,权限体系属于系统架构的一个最底层的功能,也是非常重要的功能,几乎在每个项目都会用到.那么我们该如何设计一个比较合理的且扩展性较强的权限体系呢? 经过多天的摸索,参 ...

  4. asp.net core 身份认证/权限管理系统简介及简单案例

    如今的网站大多数都离不开账号注册及用户管理,而这些功能就是通常说的身份验证.这些常见功能微软都为我们做了封装,我们只要利用.net core提供的一些工具就可以很方便的搭建适用于大部分应用的权限管理系 ...

  5. 一步一步Asp.Net MVC系列_权限管理设计

    http://www.cnblogs.com/mysweet/archive/2012/07/26/2610793.html

  6. 基于RBAC模型的权限设计:如何设计系统权限体系?

    一.什么是RABC RBAC(基于角色的权限控制)模型的核心是在用户和权限之间引入了角色的概念.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来间接地赋予用户权限(如下图),从而 ...

  7. 坎坷路:ASP.NET 5 Identity 身份验证(上集)

    之所以为上集,是因为我并没有解决这个问题,写这篇博文的目的是纪录一下我所遇到的问题,以免自己忘记,其实已经忘了差不多了,写的过程也是自己回顾的过程,并且之前收集有关 ASP.NET 5 身份验证的书签 ...

  8. ASP.NET MVC 随想录—— 使用ASP.NET Identity实现基于声明的授权,高级篇

    在这篇文章中,我将继续ASP.NET Identity 之旅,这也是ASP.NET Identity 三部曲的最后一篇.在本文中,将为大家介绍ASP.NET Identity 的高级功能,它支持声明式 ...

  9. ASP.NET Identity

    使用ASP.NET Identity实现基于声明的授权 阅读目录 走进声明的世界 创建并使用声明 基于声明的授权 使用第三方来身份验证 小节 在这篇文章中,我将继续ASP.NET Identity 之 ...

随机推荐

  1. CodeForces - 260C

    CodeForces - 260C Little Vasya had n boxes with balls in the room. The boxes stood in a row and were ...

  2. 化妆品行业的一个MES系统案例(三)

    项目的主要需求如下: (1) 管理产品的配方(物料BOM) (2) 管理产品的生产工艺(最终要将工艺参数下发到设备PLC自动执行) (3) 根据生产工单集合产品配方生成称量任务(其实领料之后的成料过程 ...

  3. B. Math Show 暴力 C - Four Segments

    B. Math Show 这个题目直接暴力,还是有点难想,我没有想出来,有点思维. #include <cstdio> #include <cstdlib> #include ...

  4. STM32 进行软件复位的方法

    platform:stm32f103xx include:core_cm3.h /** \brief System Reset \details Initiates a system reset re ...

  5. Excel+Python:分组求和

    Excel选中区域,排除序号.姓名等列,复制Ctrl+C. Python,import pandas as pd,读取剪切板并赋值给变量df,df.groupby('部门').sum().若要避免部门 ...

  6. Cassandra数据建模

    1.  概述 Apache Cassandra将数据存储在表中,每个表都由行和列组成.CQL(Cassandra查询语言)用于查询存储在表中的数据.Apache Cassandra数据模型基于查询并针 ...

  7. layui的layer.msg,form提交

    layer.msg('提示文字',{shift:1,time:2000},function(){ location.reload();});其中shift是提示框的动画样式,-1为无动画form.on ...

  8. java读取文件内容常见几种方式

    ①随机读取文件内容 ②以行为单位读取文件,常用于读面向行的格式化文件 ③以字符为单位读取文件,常用于读文本,数字等类型的文件 ④以字节为单位读取文件,常用于读二进制文件,如图片.声音.影像等文件 pa ...

  9. lvm 日常操作。

    步骤: pvcreate /dev/sdb pvdisplay vgcreate volgroup /dev/sdb vgdisplay lvcreate -L2G volgroup lvdispla ...

  10. 机器学习算法及代码实现–K邻近算法

    机器学习算法及代码实现–K邻近算法 1.K邻近算法 将标注好类别的训练样本映射到X(选取的特征数)维的坐标系之中,同样将测试样本映射到X维的坐标系之中,选取距离该测试样本欧氏距离(两点间距离公式)最近 ...