根据谁创建资源授权资源

我的一位同事向我提出了一个关于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,一经查实,立即删除!

相关文章

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;而三个等边三角形的外接圆称为托里拆…

FXRibbon 1.2版发布

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

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

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

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

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

三层网络架构

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

SDN

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

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

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

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…

应用层组播、IP组播

通常说的组播一般指IP组播&#xff0c;IGMP协议等 什么是应用层组播&#xff1f; 应用层组播通过在应用层复制和缓存数据包而不是在路由器上复制数据包来避免IP组播的部署问题。应用层组播无须对路由器作任何修改,因此在 Internet 上非常容易部署 为了改善网络效率&#xff0…

android 酷炫倒计时,android 好用的倒计时

android倒计时 是在原有TextView的基础上进行二次开发的自定义View效果图这个主要是结合了android的CountDownTimer&#xff0c;这个一般就是发送短信的倒计时。包含功能倒计时时间超过一个小时显示 时&#xff1a;分&#xff1a;秒时间小于一小时显示&#xff1a;分 &#xff…

音视频常见问题分析和解决:延迟(时延 delay)和抖动

延迟和抖动 延迟&#xff1a;是网络传输中的一个重要指标&#xff0c;测量了数据从一个端点到另外一个端点所需的时间。一般我们用毫秒作为其单位。通常我们也把延迟叫做延时&#xff0c;但是延时有时还会表示数据包发送端到接受端的往返时间。这个往返时间我们可以通过网络监…

forkjoin_应用ForkJoin –从最佳到快速

forkjoin到目前为止&#xff0c;JDK 7已很好地掌握在开发人员手中&#xff0c;并且大多数人都听说过ForkJoin&#xff0c;但是没有多少人有时间或机会去尝试它。 它引起了并且可能仍然引起一些混乱&#xff0c;与普通线程池有什么不同。 [1] 我在本文中的目标是通过一个代码示…

android usb触摸屏驱动 win10,Win10手机居然这样兼容安卓:直接运行apk!

摘要&#xff1a;“应用太少是硬伤&#xff01;”这是WP粉吐槽微软简洁而有力的一句话。最新的Win10Mobile预览版中首次引入了微软的安卓子系统&#xff0c;这也是微软推行的ProjectAstoria的一部分。那么Win10手机究竟要如何兼容安卓应用呢&#xff1f;微软最新一份招聘启事似…

Java应用程序中的验证

我经常看到的项目几乎没有任何有意识的数据验证策略。 他们的团队在截止日期&#xff0c;明确要求的巨大压力下工作&#xff0c;只是没有足够的时间以适当且一致的方式进行验证。 因此&#xff0c;数据验证代码随处可见&#xff1a;JavaScript片段&#xff0c;Java屏幕控制器&a…

升级鸿蒙系统如何退出,华为鸿蒙2.0系统升级了怎么退回EMUI11系统-操作教程详解...

华为鸿蒙2.0系统升级了怎么退回EMUI11系统&#xff1f;很多用户升级了又不知道如何才能退回到原来的系统&#xff0c;下面就让老铁下载小编为大家带来&#xff0c;2.0系统升级退回EMUI11系统操作教程详解。这次开启华为鸿蒙2.0系统手机开发者beta版公测招募的机型有华为P40 、P…

OpenFlow和SDN的历史和原理介绍

OpenFlow相关的历史、新闻&#xff1a;http://blog.csdn.net/jincm13/article/details/7825754 起源与发展 【https://36kr.com/p/5035985】   OpenFlow起源于斯坦福大学的Clean Slate项目组 [1] 。CleanSlate项目的最终目的是要重新发明英特网&#xff0c;旨在改变设计已略…

小米miuiVS华为鸿蒙,华为鸿蒙2.0 vs 小米MIUI 12.5

原标题&#xff1a;华为鸿蒙2.0 vs 小米MIUI 12.5不久前有媒体在视频中展示了鸿蒙2.0和苹果IOS14两个操作系统下App的启动速度&#xff0c;结果是鸿蒙2.0完胜IOS14。此后不久&#xff0c;该媒体发布了华为鸿蒙2.0和小米MIUI 12.5对比视频。同上次一样&#xff0c;这次依然是选择…

具有MicroProfile配置的可配置JAX-RS ExceptionMapper

当您使用JAX-RS创建REST服务时&#xff0c;通常要么不返回任何内容&#xff08;例如HTTP 201/2/4等&#xff09;&#xff0c;要么返回某些数据&#xff08;可能采用JSON格式&#xff08;因此HTTP 200&#xff09;&#xff0c;或者返回某些异常/错误&#xff08;例如HTTP 4xx或5…