如何在OSGi中使用基于权限的JAAS授权

时间:2016-04-05 08:42:22

标签: osgi wicket jaas apache-karaf

我正在研究创建一个可以在Karaf上运行的安全应用程序。作为一个从未使用过JAAS(仅与Shiro合作过)的人,我在如何实际实现JAAS中的任何事情时遇到了很多麻烦。谷歌没有多大帮助,因为它每次看到任何与JAAS相关的东西时都会喜欢Spring,JavaEE和Struts :) 我想我已经想出了如何使用Karaf管理领域和登录模块,但我确实对其余任务有一些问题:

  1. 我如何实际申请会话?部分应用程序将使用CXF REST服务进行通信,这似乎非常简单,但我也将构建一个由Wicket支持的Web前端(我猜通过pax-web)。在这种情况下,如何使JAAS使用会话以避免持续登录?

  2. 在Karaf中使用JAAS的基于权限的安全性。使用Shiro,我已经习惯了基于权限(或基于操作)的授权,其中主题具有多个角色,并且具有您实际验证的权限。似乎JAAS不支持开箱即用。有没有办法实现这一点,再次在Karaf中使用JAAS。我在哪里指定每个角色的权限?

  3. 这可能看起来像一个愚蠢的问题,但请尽量不要打得太厉害,我真的觉得我现在在JAAS溺水。执行身份验证检查的正确方法是什么?我看到AccessControllerSubject.doAsPriviledged在不同的情境中使用,我很难发现差异是什么,如果有的话。

1 个答案:

答案 0 :(得分:1)

您可以使用CXF JAAS Login Feature。它在没有任何附加配置的情况下对karaf JAAS后端进行JAAS登录。结果是登录当前线程。

可以使用以下方法检索主题:

Subject subject = Subject.getSubject(AccessController.getContext());

然后,您可以从主题中检索主体。通常,主体是用户,其他是角色。

因此,使用此功能,您可以编写自己的代码来检查权限或与我认为的shiro集成。

Aries还有blueprint authz模块,允许使用@RolesAllowed进行基于角色的身份验证。在后台,它使用JAAS主题的角色。

我还找到了an example一个完整的小应用程序。