• 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

    还有几篇博客园的文章!

  • 相关阅读:
    关于Flutter引用image_picker插件报错
    关于Flutter页面布局
    关于Flutter和Android混合开发引入flutter_boost插件-有更新,见底部
    关于uni-app的scroll-into-view
    关于全站http切换到https
    关于canvas画原子运动模型
    [BS-00] const限定常量或者变量(初次赋值后),其值不允许被改变
    认识C和内存管理
    C语言的内存管理
    堆heap和栈Stack(百科)
  • 原文地址:https://www.cnblogs.com/850391642c/p/8044377.html
Copyright © 2020-2023  润新知