gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 06:09:40 25 4
gpt4 key购买 nike

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

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

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

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

Acl 和 Group 接口(interface)最初看起来很有前途,但已被标记为已弃用,因此必须有不同的方法。但哪个?

有很多关于如何编写策略文件的教程,但这并不是我们需要的。相反,我们需要向后端请求主体的权限。再说一遍,我们需要同时使用多个后端,每个后端只知道“它自己的” native 权限,但不知道是否允许特定代码打开套接字或文件 - 因此基于原始文件的策略必须仍然存在。

有没有 JAAS 专家可以告诉我们需要实现什么以及如何在运行时让 JAAS 知道它?

最佳答案

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

  1. 使用实际的 Subject 创建一个 javax.security.auth.SubjectDomainCombiner
  2. 使用 Principal 关联的所有 Permission 填充新的 java.security.Permissions
  3. 将权限和主体与 java.security.ProtectionDomain#ProtectionDomain(CodeSource, PermissionCollection, ClassLoader, Primary[]) 结合使用,具体取决于您的上下文 CodeSource 可能为 nullPermissionCollection 是在步骤 2 中创建的 Permissions 实例。Principal 数组均为 P与权限关联的主体
  4. 通过 javax.security.auth.SubjectDomainCombiner#combine(ProtectionDomain[], ProtectionDomain[]) 组合当前(来自实际的 AccessControlContext)和新的 ProtectionDomain
  5. 基于当前 AccessControlContextSubjectDomainCombiner 创建新的 java.security.AccessControlContext#AccessControlContext(AccessControlContext, DomainCombiner)

请在以下代码中使用 AccessControlContext(第 4 步)。

希望有所帮助并且有效。

关于java - 如何向外部后端请求权限?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28896946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com