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. Github作为Maven仓库

    新建发布构件项目 新建一个普通的maven项目,坐标为 创建一个类: 接着在pom文件中添加: <distributionManagement> <repository> &l ...

  2. python(configparser 模块)

    1.下载安装 configparser 第三方模块 pip install configparser 2.读取配置文件 #配置文件内容如下 """ "D:/co ...

  3. 1 ThinkPHP框架初识

    一.PHP主流框架介绍 主流的框架有laravel.symfony.thinkphp MVC和三层结构 MVC可以说是一种开发模式,三层结构是一种开发习惯,严格来讲,他们两者是完全不同的概念,但是在实 ...

  4. 网络流 + 欧拉回路 = B - Sightseeing tour POJ - 1637

    B - Sightseeing tour POJ - 1637 https://blog.csdn.net/qq_36551189/article/details/80905345 首先要了解一下欧拉 ...

  5. 王颖奇 20171010129《面向对象程序设计(java)》第九周学习总结

    实验九 异常.断言与日志 实验时间 2018-10-25 1.实验目的与要求 (1) 掌握java异常处理技术: (2) 了解断言的用法: (3) 了解日志的用途: (4) 掌握程序基础调试技巧: 2 ...

  6. NEON中的L可以避免溢出

    在做加法时,比如两个255x255的数值相加,那么正确结果将是130050,对一个最大值为65565的unsigned short是会溢出的,但是如果使用L命令时,则不会产生溢出.这说明L命令,不是先 ...

  7. hive元数据报错?试了很多方法都没辙?也许你漏了这一步

    进入hiveCLI后,输入show databases; 显示 FAILED: SemanticException org.apache.hadoop.hive.ql.metadata.HiveExc ...

  8. 【HBase】HBase与MapReduce集成——从HDFS的文件读取数据到HBase

    目录 需求 步骤 一.创建maven工程,导入jar包 二.开发MapReduce程序 三.结果 需求 将HDFS路径 /hbase/input/user.txt 文件的内容读取并写入到HBase 表 ...

  9. 字节码编程,Javassist篇三《使用Javassist在运行时重新加载类「替换原方法输出不一样的结果」》

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 通过前面两篇 javassist 的基本内容,大体介绍了:类池(ClassPool) ...

  10. input唤起键盘影响移动端底部fixed定位

    主要代码如下: public docmHeight = document.documentElement.clientHeight || document.body.clientHeight; // ...