如何向外部后端请求权限?

时间:2015-03-06 10:34:00

标签: java permissions authorization jaas

我们的应用程序需要检查多个后端以进行身份​​验证和授权。

为此,我们为每个后端编写了一个LoginModule,现在最终得到一个具有多个Principal的主题。到目前为止,太棒了!

应用程序需要在运行时检查自定义权限。委托人是否具有该自定义权限取决于从特定后端获取的信息。在这里,我们几天都被困住了!

我们实现了自己的权限,并使用AccessController.checkPermission来检查这些。但是如何告诉JAAS实际授予的权限?没有什么比如我们可以在LoginModule中调用Principal.setPermissions()。

Acl和Group接口首先看起来很有前景,但被标记为已弃用,因此必须采用不同的方式。但是哪个?

有很多关于如何编写策略文件的教程,但这正是我们不需要的。相反,我们需要向后端询问主体的权限。而且,我们需要同时使用多个后端,并且每个后端只知道“它自己的”本机权限,但不知道是否允许特定代码打开套接字或文件 - 所以基于原始文件的策略仍然必须到位。

是否有任何JAAS专家可以告诉我们需要实现什么以及如何在运行时将其告知JAAS?

1 个答案:

答案 0 :(得分:1)

我不是JAAS的真正专家,我还没有尝试过您的要求。 也许我的第一个想法对你有帮助。

  1. 使用实际的javax.security.auth.SubjectDomainCombiner创建Subject
  2. 使用与java.security.Permissions相关联的所有Permission填充新的Principal
  3. 根据您的上下文java.security.ProtectionDomain#ProtectionDomain(CodeSource, PermissionCollection, ClassLoader, Principal[])将权限和主体与CodeSource合并为nullPermissionCollection是在第2步中创建的Permissions实例。 Principal数组与Principal相关联的所有Permissions
  4. 通过AccessControlContext合并当前(来自实际ProtectionDomain)和新javax.security.auth.SubjectDomainCombiner#combine(ProtectionDomain[], ProtectionDomain[])
  5. 根据当前java.security.AccessControlContext#AccessControlContext(AccessControlContext, DomainCombiner)AccessControlContext
  6. 创建新的SubjectDomainCombiner

    请改为使用以下代码中的AccessControlContext(第4步)。

    希望有所帮助。

相关问题