根据谁创建资源授权资源

我的一位同事向我提出了一个关于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还带有一个体系结构,用于定义如何评估和执行策略。

XACML

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

  • 策略执行点(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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345962.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

组播详解

本文转自&#xff1a;http://liuqz926.blog.163.com/blog/static/13448936220091121104233491/ 组播协议允许将一台主机发送的数据通过网络路由器和交换机复制到多个加入此组播的主机&#xff0c;是一种一对多的通讯方式。 IP组播的好处、优势 组播协议与现在广泛使用的单播…

ccf2017除法C语言,CCF考试——201709-5除法

概要问题描述小葱喜欢除法&#xff0c;所以他给了你N个数a1, a2, ⋯, aN&#xff0c;并且希望你执行M次操作&#xff0c;每次操作可能有以下两种&#xff1a;给你三个数l, r, v&#xff0c;你需要将al, al1, ⋯, ar之间所有v的倍数除以v。给你两个数l, r&#xff0c;你需要回答…

c语言中系统函数设定像素,在imag中对每个像素应用自定义函数的快速方法

我正在寻找一种更快的方法来应用一个自定义函数到一个图像&#xff0c;我用来删除蓝色背景。我有一个函数可以计算出每个像素与背景中蓝色的距离。带有循环的原始代码如下所示&#xff1a;def dist_to_blue(pix):rdist 76 - pix[0]gdist 150 - pix[1]bdist 240 - pix[2]retu…

netbeans7.4_NetBeans 7.4的本机Java打包

netbeans7.4成为“ NetBeans 74 NewAndNoteworthy ”页面的NetBeans 7.4的新功能之一是“本机打包 ”&#xff0c;在该页面上被描述为“ JavaSE项目现在支持使用JavaFX提供的本机打包技术来创建本机包。 ” 我将使用一个非常简单的示例来演示NetBeans 7.4中的本机打包功能。 下…

斯坦纳点/树、泰森多边形

斯坦纳点 斯坦纳点别名正等角中心、费尔马点、斯坦纳点 在三角形的三边各向其外侧作等边三角形&#xff0c;这三个等边三角形的外接圆交于一点T&#xff0c;该点T即称为托里拆利点&#xff08;Torricelli’s point &#xff09;&#xff0c;而三个等边三角形的外接圆称为托里拆…

c语言如何将程序保存在文件,急求如何将下列C语言程序数据存储到文件中?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼求如何改动才能将下列程序的存储输入或输出数据(或两者一起)到指定的文件(或运行时直接创立一个文件)如Arrangement中。#include int n0;int rest[7][7]; //全局声明,以供全局调用int main(){void perm(int list[],int ,int );int …

FXRibbon 1.2版发布

这次&#xff0c;有所不同。 Microsoft对FXRibbon的更新&#xff0c;就像Java的功能区控件&#xff08;JavaFX&#xff09;一样 。 在发出使FXRibbon做好更好的准备以将其更新到Java 9以及更高版本的要求之后&#xff0c;我借此机会还添加了一些功能&#xff0c;进行了一些美学…

路由和交换

路由和交换 网络的工作方式是使用两种设备&#xff1a;交换机和路由器&#xff0c;来将计算机与外围设备连接起来。这两种工具使连接到网络上的设备之间以及其它网络相互通信。 虽然路由器和交换机看起来很像&#xff0c;但是它们在网络中的功能却截然不同&#xff1a; 交换机…

c语言链表写贪吃蛇思路,C语言构建的链表贪吃蛇

用C语言链表写的贪吃蛇(程序设计时做的&#xff0c;做的不好大佬勿喷)借助游戏内容分析贪吃蛇所需的功能主要包括这几块&#xff1a;移动光标模块打印地图模块和基本规则信息读取最高分文件打印初始蛇模块打印时给予蛇的初始移动方向产生食物模块1)、保证食物在地图内产生2)、保…

用普罗米修斯和格拉法纳乐器来刺豪猪

Adam Bien的Porcupine库使配置用作应用程序隔板的专用执行程序服务变得容易。 我创建了一个扩展&#xff0c;通过MicroProfile Metrics公开了豪猪统计信息。 我们还可以通过Prometheus和Grafana仪表板使仪器可见。 进行此扩展的原因是我们希望对Porcupine线程池的检测进行简单…

三层网络架构

三层网络架构 数据中心网络是连接数据中心大规模服务器进行大型分布式计算的桥梁。 传统数据中心网络普遍采用树型拓扑方案&#xff0e; 典型的拓扑由三层交换机互联构成&#xff0c;分别是接入层交换机、汇聚层交换机和核心层交换机。Cisco称之为&#xff1a;分级的互连网络模…

c语言调用labview方法,LabVIEW与C语言接口的方法

摘要介绍了一种LabVIEW与C 语言接口的方法&#xff0c;由实例证明&#xff0c;该方法高效、易行&#xff0c;是增强LabVIEW整体功能的一条有效的途径。关键词虚拟仪器LabVIEW 动态链接库LabVIEW是一种方便灵活的虚拟仪器开发环境。当前&#xff0c;虚拟仪器技术已广泛应用到各种…

SDN

直接理解 SDN是在2009年左右出现的一种新型网络结构&#xff0c;它将数据层面与控制层面分离&#xff0c;使用中央控制器完成网络的操作和管理&#xff0c;并通常采用OpenFlow协议作为其核心通信协议&#xff0c;拥有着集中式控制、可编程、部署灵活性和数据层面与控制层面相互…

gradle插件 java_简单的Gradle Java插件自定义

gradle插件 java正如我在“ 用Gradle构建Java的初步了解”一文中所展示的那样&#xff0c;当Gradle使用Java插件并将文件和目录放置在该插件期望的位置时&#xff0c; Gradle尤其适用于构建Java应用程序的基础知识&#xff08;约定-基于项目的布局 &#xff09;。 但是&#xf…

android 检测过程,Android 系统对permision的检测过程

Android 系统对permision的检测过程RK3288 5.1 中以太网设置静态IP 对permission的检测简略的调用过程如下&#xff1a;frameworks\opt\net\ethernet\java\com\android\server\ethernet\EthernetServiceImpl.javapublic void setConfiguration(IpConfiguration config) {if (!m…

IP地址分类(A类 B类 C类 D类 E类)

IP地址类型 公有地址 公有地址&#xff08;Public address&#xff09;由Inter NIC&#xff08;Internet Network Information Center因特网信息中心&#xff09;负责。这些IP地址分配给注册并向Inter NIC提出申请的组织机构。通过它直接访问因特网。 私有地址 私有地址&am…

Java:将JDBC ResultSet作为JSON流式传输

这篇文章展示了如何将java.sql.ResultSet转换为JSON并将其流回调用方。 如果要将大型数据集从JDBC数据源以JSON格式发送到Web应用程序&#xff0c;此功能很有用。 流式传输使您可以一点一点地传输数据&#xff0c;而不必将所有数据都加载到服务器的内存中。 例如&#xff0c;考…

android 开发 短信,Android开发之短信发送

今天要讲的是使用Android开发发送短信程序。我们先来看下运行效果图(1) 图(2)图(3)图(1)&#xff1a;当我们运行项目时&#xff0c;出现在屏幕的效果&#xff1b;图(2)&#xff1a;当我们输…

ISP (互联网服务提供商)

ISP&#xff1a;全称为Internet Service Provider&#xff0c;即因特网服务提供商&#xff0c;能提供拨号上网服务、网上浏览、下载文件、收发电子邮件等服务&#xff0c;是网络最终用户进入Internet的入口和桥梁。它包括Internet接入服务和Internet内容提供服务。这里主要是In…