我的一位同事向我提出了一个关于StackOverflow的有趣问题,并由于我在Spring方面的经验,建议我回答一个很好的问题。

问题是:“ 如何基于使用注释在REST中创建资源的用户来授权特定资源 。”

要点是:

我想做的是创建一个名为@Authorize的注释,并将其用于需要用户授权才能执行某些操作的用户(此时用户已通过身份验证)。 例如。 我有一个带有getOrder()方法的订单服务。 我只希望创建此订单的用户访问它。

我对StackOverflow的回答

为了对Java中的方法实现授权控制,我强烈建议使用带有 Spring Security API 的可扩展访问控制标记语言(XACML)实现的Spring Security。

Spring安全

Spring Security提供了两种主要方法来保护对方法的访问:

  • 预授权 :这允许在允许执行该方法之前检查某些条件/约束。 无法验证这些条件将导致无法调用该方法。
  • 后授权 :允许在方法返回后检查某些条件/约束。 与预授权检查相比,此方法使用较少,但可用于在复杂的互连业务层方法周围,特别是在与该方法返回的对象相关的约束周围,提供额外的安全性。

例如,说访问控制规则之一是用户在能够调用方法getEvents()之前具有ROLE_ADMIN权限。 在Spring Security框架中执行此操作的方法是使用PreAuthorize批注,如下所示:

public interface Sample { ...
@PostAuthorize("hasRole('ROLE_ADMIN')")
Event getEvent(); }

本质上,Spring Security使用运行时面向方面编程(AOP)切入点在对该方法提出建议之前执行,并在ossaccess.AccessDeniedException指定的安全性约束的情况下抛出ossaccess.AccessDeniedException

在本文档的第27.3节中可以找到有关Spring Security的方法级别安全性的更多信息 。

可扩展访问控制标记语言(XACML)– ABAC的策略语言

Spring Security通过基于表达式的访问控制在实现访问控制方面做得很出色,但是基于属性的访问控制(ABAC)允许对访问进行更细粒度的控制,这是美国国家标准技术研究院的推荐。

为了解决基于角色的访问控制(RBAC)的局限性,NIST提出了一种称为ABAC(基于属性的访问控制)的新模型。 在ABAC中,您现在可以使用更多的元数据/参数。 例如,您可以考虑:

  • 用户的身份,角色,职务,位置,部门,出生日期…
  • 资源的类型,位置,所有者,价值,部门...
  • 上下文信息,例如用户在资源上尝试执行的操作的时间

所有这些都称为属性。 属性是ABAC的基础,因此是名称。 您可以将这些属性组合到策略中。 政策有点像ABAC的秘密武器。 策略可以授予和拒绝访问。 例如:

  • 如果员工和记录位于同一区域,则员工可以查看记录
  • 在下午5点至早上8点之间拒绝访问阅读记录。

策略可用于表达高级方案,例如

  • 职责分工
  • 基于时间的约束(请参见上文)
  • 基于关系的访问控制(请参见上文)
  • 委派规则委派Bob访问Alice的文档。

有两种主要语法可用于编写策略:

  • 基于XACML的缩写授权语言(ALFA)
  • 可扩展访问控制标记语言(XACML)

ABAC还带有一个体系结构,用于定义如何评估和执行策略。

该体系结构包含以下组件:

  • 策略执行点(PEP):这是保护您要保护的API /应用程序的组件。 PEP拦截流,对其进行分析,然后向PDP发送授权请求(请参见下文)。 然后,它会收到执行的决定(许可/拒绝)。
  • 策略决策点(PDP)会收到授权请求(例如Alice可以查看记录#123?),并根据已配置的策略集对其进行评估。 最终,它会做出决定,并将其发送回PEP。 在评估过程中,PDP可能需要其他元数据,例如用户的职务。 为此,它可以求助于策略信息点(PIP)
  • 策略信息点(PIP)是PDP与基础数据源(例如LDAP,数据库,REST服务)之间的接口,其中包含有关用户,资源或其他方面的元数据。 您可以使用PIP检索PDP在运行时可能需要的信息,例如风险评分,记录的位置或其他。

XACML的实现

全面披露–我在XACML技术委员会工作,并为Axiomatics工作, Axiomatics是实施XACML的动态授权的提供者。

Axiomatics为他们的Axiomatics Policy Server提供了一个Spring Security SDK,它提供了四个表达式,可用于查询PDP,作为保护方法调用的一部分

  1. xacmlDecisionPreAuthz,使用@PreAuthorize
  2. xacmlDecisionPostAuthz,使用@PostAuthorize
  3. xacmlDecisionPreFilter,使用@PostFilter
  4. xacmlDecisionPostFilter,使用@PreFilter

这些方法的确切签名如下:

  1. xacmlDecisionPreAuthz(Collection<String> attributeCats,
    Collection<String> attributeTypes, Collection<String> attributeIds,
    ArrayList<Object> attributeValues)
  2. xacmlDecisionPostAuthz(Collection<String> attributeCats,
    Collection<String> attributeTypes, Collection<String> attributeIds,
    ArrayList<Object> attributeValues)
  3. xacmlDecisionPreFilter(Collection<String> attributeCats, Collection<String>
    attributeTypes, Collection<String> attributeIds, ArrayList<Object>
    attributeValues)
  4. xacmlDecisionPostFilter (Collection<String>
    attributeCats, Collection<String> attributeTypes, Collection<String>
    attributeIds, ArrayList<Object> attributeValues)

有关XACML实现的完整列表,可以在Wikipedia上查看此列表 。

翻译自: https://www.javacodegeeks.com/2018/07/authorizing-resources-created.html

根据谁创建资源授权资源相关推荐

  1. idea资源包下创建资源包_根据谁创建资源授权资源

    idea资源包下创建资源包 我的一位同事向我提出了一个关于StackOverflow的有趣问题,并由于我在Spring方面的经验,建议我回答一个很好的问题. 问题是," 如何基于使用批注在R ...

  2. 不同账号间的云资源授权方法

    阿里云的访问控制RAM产品可以实现资源的分配和授权,在一个特殊的业务背景下,资源也可以实现跨账号的授权使用. 背景: 1.A公司,作为甲方Party A,出资购买云资源,对云资源具有所有权,但不实际管 ...

  3. 通过案例了解puppet创建虚拟资源解决资源冲突问题

    通过案例了解puppet创建虚拟资源解决资源冲突问题 虚拟资源是一种用来管理多种配置共同依赖同一资源的方法.如果多个类依赖同一个资源时则可避免写多个资源,也可以解决资源重定义的错误. 虚拟资源经常用于 ...

  4. nodejs 创建一个静态资源服务器 +路由

    0.补充 1.Node.js 创建的第一个应用 1.引入 http 模块 var http = require("http"); 2.创建服务器 接下来我们使用 http.crea ...

  5. 玩转SpringCloud Security OAuth2资源授权动态权限扩展

    点击关注公众号,实用技术文章及时了解 来源:blog.csdn.net/new_com/article/ details/104731154 在Spring Cloud Security 中,认证和授 ...

  6. 一、TCL事务控制语言 二、MySQL中的约束 三、多表查询(重点) 四、用户的创建和授权 五、MySQL中的索引...

    一.TCL事务控制语言 ###<1>事务的概念 事务是访问并可能更新数据库中各种数据项的执行单元. 事务是一条SQL语句,一组SQL语句,或者整个程序. 事务是恢复和并发控制的基本单位. ...

  7. 【Azure】微软 Azure 基础解析(五)核心体系结构之管理组、订阅、资源和资源组以及层次关系

    本系列博文还在更新中,收录在专栏:「Azure探秘:构建云计算世界」 专栏中. 本系列文章列表如下: [Azure]微软 Azure 基础解析(三)描述云计算运营中的 CapEx 与 OpEx,如何区 ...

  8. k8s资源限制——资源的配额管理(Resource Quotas)

    简介 在k8s集群中为了能够使系统正常稳定运行,通常会限制Pod的资源使用情况,在k8s集群中如果有一个程序出现异常,并占用大量的系统资源.如果未对该Pod进行资源限制的话,可能会影响其他的Pod. ...

  9. 002-unity 资源及资源类型 srt字幕文件

    1 00:00:00,000 --> 00:00:04,000 英宝通unity学院公开课第二讲 2 00:00:04,000 --> 00:00:06,000 资源管理 3 00:00: ...

最新文章

  1. BZOJ 4517: [Sdoi2016]排列计数 [容斥原理]
  2. 常考数据结构与算法-manacher算法
  3. js技巧--转义符\的妙用
  4. unix高级编程apue.h问题
  5. Linux memcached
  6. spark生态及各个功能
  7. (网页)JS实现alert中显示换行的方法
  8. Adobe Flex初记
  9. 【优化预测】基于matlab贝叶斯网络优化LSTM预测【含Matlab源码 1329期】
  10. mockito验证参数_Mockito验证
  11. 编程珠玑第三章笔记加习题解答
  12. 计算二维离散随机变量的联合概率分布
  13. 黑苹果后遗症 台式机Win10时间总是不同步
  14. java生成pdf旋转_如何使用Java旋转PDF文档中的图像?
  15. linux 卸载yum源,CentOS下rpm包与yum安装与卸载更新系统源
  16. 【边做项目边学Android】手机安全卫士10-设置向导之绑定SIM卡
  17. 还有人在质疑数据挖掘是泡沫吗?千万不要叶公好龙
  18. 交易系统单服务器tps,性能优化那些事之一,TPS和延时
  19. 艾兰岛编辑器-UI面板
  20. android 短信 8859 1,短信接口

热门文章

  1. 4、java中的流程控制(程序结构)
  2. 五分钟轻松了解Hbase面向列的存储
  3. JQuery AJAX请求结果的null为key时无法进入success方法
  4. MySQL isnull()函数基本指南
  5. Java IO: Reader And Writer
  6. Java 集合系列03之 ArrayList详细介绍(源码解析)和使用示例
  7. 最新后端架构师技术图谱
  8. 09-一对多关系建表
  9. Tomcat9.0 设置局域网内其他电脑或手机端访问{9.0更新}
  10. 微信消息提醒与消息数字提示之BadgeView