我正在尝试通过添加授权来保护REST服务。例如,允许所有客户拨打/rest/{custno}/machines/{machno}
,但他们只能看到他们拥有的机器。
我看到有@RolesAllowed
之类的注释,但在这种情况下无效。
我尝试过使用拦截器,这似乎可以在Websphere8.5上运行,但是不能在Tomcat 7或8上运行。拦截器能够从会话和路径获取客户信息,并确保它们是相同的或者用户具有管理员权限。能够使用注释生成概述以查看每个服务的安全性是非常好的。
解决此类问题的典型方法是什么?
答案 0 :(得分:1)
让我们从政策开始。
例如,允许所有客户呼叫/休息/ {custno} / machines / {machno},但他们只能看到他们拥有的机器。
在伪政策中,使用ALFA,这将成为
/**
* Control access to machines
*/
policyset machines{
target clause objectType == "machine"
apply firstApplicable
/**
* View machines
*/
policy viewMachines{
target clause actionId == "view"
apply firstApplicable
/**
* Users are only allowed to see the machines which they own.
*/
rule usersCanViewTheirOwnMachines{
permit
condition machine.owner == username
}
}
}
这种方法的好处是你不需要为此编写任何代码。所有授权逻辑都在策略内完成。
现在,让我们谈谈架构。你需要: