java - OSGi 用户管理服务用户对象

标签 java security osgi user-permissions user-roles

我想使用 OSGi 用户管理服务来确保安全,但我无法获得足够的资源。 我想对将安装在系统中的某些 bundle 进行身份验证,并在身份验证后由用户对象表示它们。以便我以后可以使用这些用户对象进行授权。

我有两个问题:

  1. 由于我有多个用户,我如何知道哪个包正在调用安全方法? (我不想将用户对象作为参数传递给我想要控制的每个方法)。

  2. 如何将 bundle 与代表它们的用户对象相关联?

我想要一个包作为入口点,它将验证所有这些其他包并控制它们。但我什至找不到任何人提到使用用户管理服务。除了 CPA 之外,OSGi 安全性还有其他选择吗?我也想用它来保护我的控制台。

最佳答案

这是将很多问题合而为一的问题。让我尝试全部回答。

首先,UserAdmin 服务是在 OSGi 纲要中指定的。在那里,它解释了如何定义用户、角色等,以及如何使用该服务来回答诸如“此用户是否具有角色 X”之类的问题?但没有告诉您如何将此服务用作安全解决方案的一部分。这取决于你。

关于问题 1,它不是 OSGi 相关问题(而是 Java 应用程序中的一般问题),传统上有几种将“上下文”传递给方法的方法:

  1. 将其作为每个方法的参数(您不想这样做)。
  2. 将其存储在 ThreadLocal 上下文中(这在 JavaEE 中相当流行,但如果您的应用程序将工作委托(delegate)给可能会或可能不会正确传递此类上下文的线程池,则有其缺点)。
  3. 如果这完全是关于您自己实现的服务(而不是第三方服务)的安全性,您可以使用 OSGi 中的 ServiceFactory 模式为每个客户端包提供它自己的上下文(并在其中嵌入用户对象;例如查看 Felix 中的 LogService 实现,它使用该机制将 bundle.id 添加到每个日志消息)。
  4. 有时,不将上下文嵌入方法的额外参数中,而是将其作为某些现有对象的一部分也很有意义(如此有效,您随后将上下文与特定对象相关联,这可能有意义,也可能不有意义,具体取决于您的域)。
  5. 另一种选择是使用 Apache Felix 依赖管理器来拦截您想要保护的服务(在一个方面),并在这个方面找出正在调用的包,并进行适当的安全检查(可能需要一个更详细的答案,如果你想试一试)。

关于问题 2,bundle 有一个标识它们的符号名称。您可以使用它来将 bundle 与用户相关联。还有其他选项,但这是最明显的选项。

关于您关于 OSGi 安全选项的问题,我想说 ConditionalPermissionAdmin(和旧的 PermissionAdmin)是解决 OSGi 框架本身安全问题的唯一解决方案,如果您想指定特定的 bundle 可以做什么和不能做什么导入包、使用服务、访问文件系统等。如果您想将其与 UserAdmin 集成,则必须编写自己的自定义权限。

最后,安全控制台是您需要自己解决的另一件事。您也许能够找到一些构建 block ,因为我知道有人实现了一些基于角色的访问(想到了 David Bosschaert)。然而,控制台是一个复杂而强大的东西,所以单独回答这个问题需要的不仅仅是一个简单的 SO 问题,因为它取决于你想要实现它的粒度和粒度。

关于java - OSGi 用户管理服务用户对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26963998/

相关文章:

java - Spring Security HTTP POSTMAN - 登录 - 状态 405 - 不允许方法

java - 将 Java 复杂对象转换为 Json

security - 将客户端证书的 DN 传递给 Tomcat 中已部署的应用程序

java - AWS API Gateway 和 Lambda 返回图像

java - 如何检查 MobileElement 是否显示在屏幕上

osgi - 如何在 OSGi 中使用多值(数组)属性?

java - OSGi 插件 - MANIFEST.MF 被覆盖,在运行时发生更改

java - 使用在后台运行的 REST Web 服务的 OSGi 网站

java - Spring:登录后基于角色的重定向

ruby-on-rails - 在 Ruby on Rails 中将安全逻辑与模型混合?