Asp.net Identity身份与权限体系设计
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身份与权限体系设计的更多相关文章
- ASP.NET MVC 随想录——探索ASP.NET Identity 身份验证和基于角色的授权,中级篇
在前一篇文章中,我介绍了ASP.NET Identity 基本API的运用并创建了若干用户账号.那么在本篇文章中,我将继续ASP.NET Identity 之旅,向您展示如何运用ASP.NET Ide ...
- ASP.NET Identity 身份验证和基于角色的授权
ASP.NET Identity 身份验证和基于角色的授权 阅读目录 探索身份验证与授权 使用ASP.NET Identity 身份验证 使用角色进行授权 初始化数据,Seeding 数据库 小结 在 ...
- asp.net Core3.1自定义权限体系-菜单和操作按钮权限
我们在做项目项目,经常会碰到权限体系,权限体系属于系统架构的一个最底层的功能,也是非常重要的功能,几乎在每个项目都会用到.那么我们该如何设计一个比较合理的且扩展性较强的权限体系呢? 经过多天的摸索,参 ...
- asp.net core 身份认证/权限管理系统简介及简单案例
如今的网站大多数都离不开账号注册及用户管理,而这些功能就是通常说的身份验证.这些常见功能微软都为我们做了封装,我们只要利用.net core提供的一些工具就可以很方便的搭建适用于大部分应用的权限管理系 ...
- 一步一步Asp.Net MVC系列_权限管理设计
http://www.cnblogs.com/mysweet/archive/2012/07/26/2610793.html
- 基于RBAC模型的权限设计:如何设计系统权限体系?
一.什么是RABC RBAC(基于角色的权限控制)模型的核心是在用户和权限之间引入了角色的概念.取消了用户和权限的直接关联,改为通过用户关联角色.角色关联权限的方法来间接地赋予用户权限(如下图),从而 ...
- 坎坷路:ASP.NET 5 Identity 身份验证(上集)
之所以为上集,是因为我并没有解决这个问题,写这篇博文的目的是纪录一下我所遇到的问题,以免自己忘记,其实已经忘了差不多了,写的过程也是自己回顾的过程,并且之前收集有关 ASP.NET 5 身份验证的书签 ...
- ASP.NET MVC 随想录—— 使用ASP.NET Identity实现基于声明的授权,高级篇
在这篇文章中,我将继续ASP.NET Identity 之旅,这也是ASP.NET Identity 三部曲的最后一篇.在本文中,将为大家介绍ASP.NET Identity 的高级功能,它支持声明式 ...
- ASP.NET Identity
使用ASP.NET Identity实现基于声明的授权 阅读目录 走进声明的世界 创建并使用声明 基于声明的授权 使用第三方来身份验证 小节 在这篇文章中,我将继续ASP.NET Identity 之 ...
随机推荐
- Linked List-1
链表一直是面试的重点问题,恰好最近看到了Stanford的一篇材料,涵盖了链表的基础知识以及派生的各种问题. 第一篇主要是关于链表的基础知识. 一.基本结构 1.数组回顾 链表和数组都是用来存储一堆数 ...
- linux上github的简单使用
Git是一个分布式的版本控制系统,最初由Linus Torvalds编写,用作Linux内核代码的管理.在推出后,Git在其它项目中也取得了很大成功,尤其是在Ruby社区中.目前,包括Rubinius ...
- redis 6.0下redis-cluster-proxy代理尝试
伴随着Redis6.0的发布,作为最令人怦然心动的特性之一,Redis官方同时推出Redis集群的proxy了:redis-cluster-proxy,https://github.com/Redis ...
- 记忆化搜索 E - Loppinha, the boy who likes sopinha Gym - 101875E
E - Loppinha, the boy who likes sopinha Gym - 101875E 这个题目是一个dp,这个应该很容易看出来,但是对于状态的定义其实有点难去想, 看了题解dp[ ...
- React 导入组件前段浏览器报错 “Cannot read property 'Component' of undefined”
问题出在这个花括号上,当你写{React}的时候,他只会导入React,并不会导入下面你要用到的Component组件, 所以,将括号去掉就可以了. 别忘记保存.
- vim基础快捷键
vim快捷键 1. 移动光标 快捷键 作用 h 光标向左移动一个字符 j 光标向下移动一个字符 k 光标向上移动一个字符 l 光标向右移动一个字符 6j 向下移动6个字符 Ctrl+f 屏幕向下移动一 ...
- 201771010113 李婷华 《面向对象程序设计(java)》第十五周总结
一.理论知识部分 JAR文件 Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar文件后,GUI界面程序就可以直接双击图标运行. .jar文件(Java归档)既可以包含类文件 ...
- 加速你的网络!软路由构建 去AD+国内域名加速解析+抗污染+速度优选 与PSW无缝集成 综合方案
本方案利用OpenWrt搭建4级DNS,实现 去AD + 国内域名加速解析 + 抗污染(域名解析按地区分流)+ 访问速度优选. 方案涉及部分软件配置细节可以参照之前博文:https://www.cnb ...
- STM32 时钟树配置快速入门
layout: post tags: [STM32] comments: true 文章目录 layout: post tags: [STM32] comments: true 为什么要了解时钟树? ...
- shell 循环结构
前言 循环结构在编程中十分常见,也是程序中是较为重要的一部分,在bash中有 for,until,while 这三种语句可以进行重复执行部分程序流程,下面会进一步讨论这三个指令的使用以及注意事项 fo ...