ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 如何使用注释基于在REST中创建这些资源的用户来授权特定资源

2019-09-10 23:19:58  阅读:412  来源: 互联网

标签:java spring authorization annotations annotation-processing


我不理解保留策略的Java注释作为RUNTIME.我要做的是创建一个名为@Authorize的注释,并将其用于需要用户授权的方法,以便执行某些操作(此时用户已经过身份验证).
例如.我有一个带有getOrder()方法的订单服务.我只想创建此订单的用户访问它.
`

public void getOrder(User user) {
   //current code does something like this
   if(order.getCreatedBy().equals(user)) {
     //then proceed. 
}

}
`

我不想将这种逻辑与业务逻辑混合在一起.相反,我希望有这样的东西 –
`

@Authorize
public void getOrder(User user) {
   //business logic
}

`
有几种方法,但并非所有方法都需要这样的授权.有人可以解释一下我怎么能把这些碎片装在一起?
在这一点上我不明白的是AnnotationProcessor如何在这里帮助我,因为它在编译时发挥了它的魔力.据我所知,它将帮助我在编译时生成一些代码,但我不知道如何使用生成的代码.我在AnnotationProcessors上经历了很多例子,但我仍然遗漏了一些东西.
这些链接帮助我了解到目前为止的注释处理 –

http://hannesdorfmann.com/annotation-processing/annotationprocessing101
https://equaleyes.com/blog/2017/09/04/annotation-processing/

即使我使用反射,我应该在哪里放置反射逻辑?它与我想要实现的目标相反吗?

在这一点上,我对其他解决方案也持开放态度,这些解决方案不涉及注释,但会帮助我将业务逻辑与这种特定于资源的授权分离出来.

解决方法:

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

春季安全

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

>预授权:这允许某些条件/约束
在允许执行方法之前检查.没有
验证这些条件会导致无法调用
方法.
> Postauthorization:这允许某些条件/约束
方法返回后检查.使用频率较低
预授权检查,但可用于提供额外的安全性
特别是围绕复杂的互联业务层方法
围绕与方法返回的对象相关的约束.

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

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

本质上,Spring Security使用运行时面向方面编程(AOP)切入点在方法建议之前执行,如果不满足指定的安全性约束,则抛出o.s.s.access.AccessDeniedException.

有关Spring Security的方法级安全性的更多信息,请参见本documentation第27.3节.

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

Spring Security通过基于表达式的访问控制实现访问控制,但基于属性的访问控制(ABAC)允许对访问进行更细粒度的控制,并由美国国家标准与技术研究院推荐.

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

>用户的身份,角色,职称,地点,部门,日期
出生…
>资源的类型,位置,所有者,价值,部门……
>上下文信息,例如一天中的时间用户的动作
尝试资源

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

>如果员工和记录位于同一区域,员工可以查看记录
>拒绝在下午5点到8点之间访问阅读记录.

策略可用于表达高级场景,例如

>职责分工
>基于时间的约束(见上文)
>基于关系的访问控制(见上文)
>委托规则委托Bob访问Alice的文档.

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

> the Abbreviated Language for Authorization (ALFA), which is based on XACML
> the eXtensible Access Control Markup Language (XACML)

ABAC还提供了一个架构,用于定义如何评估和实施策略.

ABAC GRAPH

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

>策略执行点(PEP):这是组件
保护您要保护的API /应用程序. PEP拦截
流程,分析它,并向PDP发送授权请求
(见下文).然后它收到一个决定(允许/拒绝)
强制执行.
>策略决策点(PDP)接收授权请求
(例如,Alice可以查看记录#123吗?)并根据该集对其进行评估
已配置的策略.它最终达到了
它发送回PEP的决定.在评估期间
过程,PDP可能需要额外的元数据,例如用户的工作
标题.为此,它可以转向政策信息点(PIP)
>策略信息点(PIP)是PDP之间的接口
和基础数据源,例如LDAP,数据库,REST服务
其中包含有关用户,资源或其他的元数据.您可以使用
用于检索PDP在运行时可能需要的信息的PIP,例如风险
得分,记录的位置或其他.

XACML的实现

完全披露 – 我在XACML技术委员会工作,并在Axiomatics工作,这是一个实施XACML的动态授权提供商.

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

> xacmlDecisionPreAuthz,使用@PreAuthorize调用
> xacmlDecisionPostAuthz,使用@PostAuthorize调用
> xacmlDecisionPreFilter,使用@PostFilter调用
> xacmlDecisionPostFilter,使用@PreFilter调用

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

> xacmlDecisionPreAuthz(Collection< String> attributeCats,
收集和LT;字符串&GT attributeTypes,Collection< String> attributeIds,
的ArrayList&LT对象> attributeValues)
> xacmlDecisionPostAuthz(Collection< String> attributeCats,
收集和LT;字符串&GT attributeTypes,Collection< String> attributeIds,
的ArrayList&LT对象> attributeValues)
> xacmlDecisionPreFilter(Collection< String> attributeCats,Collection< String>
attributeTypes,Collection< String> attributeIds,ArrayList< Object>
attributeValues)
> xacmlDecisionPostFilter(Collection< String>
attributeCats,Collection< String> attributeTypes,Collection< String>
attributeIds,ArrayList< Object> attributeValues)

对于entire list of XACML implementations, you can check this list on Wikipedia.

标签:java,spring,authorization,annotations,annotation-processing
来源: https://codeday.me/bug/20190910/1801912.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有