有没有办法在OSGi中保护对bundle的访问?

时间:2009-11-25 17:00:01

标签: security osgi

我有一个由几个OSGi包组成的应用程序。我想强制执行其中一些仅在提供有效令牌(例如许可证密钥)时才提供其他捆绑包访问其服务。

这就是我想限制对这些捆绑包的访问的原因:

  • 安全性:他们没有自己的访问策略,因为这取决于使用捆绑包的应用程序。这意味着他们必须信任客户端包以验证他们所代表的应用程序或用户的权限。我想控制我信任的访问控制方案。
  • 可靠性:我允许并鼓励开发第三方模块以向我的系统添加功能。为了能够保证一些可靠性,我想控制这些扩展与我的系统交互的级别。此外,我想确保我自己的捆绑包仅用于已经过测试的组合。
  • 许可:某些模块中可能存在只能与适当许可证一起使用的功能,或者,我可能希望确保客户不能在不同安装之间交换捆绑包。

我已经阅读了一些关于ServicePermission类和OSGi框架相关的内容,但在我看来,这些让网站管理员控制访问策略,而不是捆绑包制造商,这就是我想要的

1 个答案:

答案 0 :(得分:1)

您的用例似乎相当复杂,所以我不确定这是否完全回答了您的问题。但是,您可以查看Service Hooks,这是OSGi第4版4.2版中添加的新功能。

使用Find Hook,应该可以“查看并减少getServiceReferencegetServiceReferences方法的结果。此挂钩可以从结果中删除服务引用对象,也可以有效地从呼叫者隐藏服务。“ (来自Peter Kriens撰写的article

使用此功能,您可以为客户端捆绑包实施自己的机制,以“授权”自己访问特定服务(或相反地“检查”客户端捆绑包以确定是否应授予对特定服务的访问权限。)