【问题标题】:How to map additional LDAP attributes to the Principal object in Glassfish?如何将其他 LDAP 属性映射到 Glassfish 中的 Principal 对象?
【发布时间】:2013-08-29 13:55:10
【问题描述】:

我已经在 Glassfish 中配置了一个 LDAP 领域,并且身份验证工作正常。

现在我想知道如何将 Principal.getName() 返回匹配到我的 LDAP 用户对象的某个属性。我以为它会默认使用诸如“givenName”之类的东西,但它会返回用于身份验证的用户名。

我不介意额外访问 LDAP 服务器以获取其他信息,但我不想在我的应用程序中保留 LDAP 连接属性,而是想注入安全领域(如果有可能的话) 并使用自己的连接。

所以,简而言之,问题是:

1) 我可以将其他属性映射到领域返回的 Principal 吗?

2) 如果第一个是不可能的,那么我如何重用领域的信息来连接到 LDAP 服务器并获取我需要的数据?

提前感谢您的任何帮助或建议。

【问题讨论】:

  • 您是否提供自己的LoginModule?
  • 不,我想避免这种情况并尽可能使用与容器的无缝集成,因为相同的工具将部署在不同的容器(Glassfish、WebLogic 和 JBoss)上。我能做到的最“符合规范”,就越好。
  • @javabeats JASPIC auth 模块是标准的 Java EE 6 东西。它像 Servlet 或 Filter 一样包含在战争中,并且作为标准 API 的一部分,它与 GlassFish、WebLogic 和 JBoss 一起使用。
  • 我的印象是我必须扩展特定的类来构建一个 LoginModule,因此,我必须为每个容器提供一个实现。很高兴知道事实并非如此。感谢您的建议!

标签: java active-directory glassfish ldap ejb


【解决方案1】:

JAAS 主题通常包含许多主体,每个主体代表不同的属性。

对于 Java EE,选择这些 Principal 中的一个,并且只有一个,作为调用 HttpServletRequest#getUserPrincipal 和类似方法时返回的那个。其他 Principals 用于刚刚丢失的 Java EE API。

如果登录是通过 HTTP 或 SOAP 发生的,您可以通过编写 JASPIC 身份验证模块来确定选择哪些 Principal。

您可以通过从 JASPIC 身份验证模块中将其放入 HTTP 会话来保留整个主题。其他代码可以从那里获取它。

【讨论】:

  • 感谢您的回复,但我想尽可能避免编写任何扩展名(应该在原帖中提到)。
  • 接受您的回答,因为可以提供“跨容器”JASPIC 身份验证模块来处理该问题。谢谢!
【解决方案2】:

已编辑:我的印象是以下曾经可以工作,至少在 GlassFish 4.0 中是这样。不幸的是,情况(不再)似乎不是这样。解决方法可以在this issue 的 cmets 中找到。

本身并不是真正的解决方案;只是我一直忽略了一段时间的一个小细节,现在我意识到了这一点,这让我松了一口气。所以--跳过无聊的细节--我意识到CallerPrincipalCallback(Subject s, Principal p) 构造函数是另外可用的,当提供我的自定义Principal 时,会导致服务器实际保留它,而不是将其包装或转换为内部 GlassFish 实现实例,正如我之前认为的那样。然后,我可以从“用户空间”以通常的方式(例如ExternalContext#getUserPrincipal等)访问我的“丰富”(比Principal-like,更多Subject-)版本,投射并享受从现在开始不必关心从每个应用程序中的通用Principals 派生的便利:)。

【讨论】:

    【解决方案3】:

    好吧,如果不使用自定义 LoginModule,我无法扩展 Principal 属性映射;所以,我选择了这里描述的解决方案:http://docs.oracle.com/cd/E19798-01/821-1751/abllk/index.html

    我所做的是,在身份验证后,使用注入的 LDAP 上下文返回 LDAP 服务器并获取我想要的属性。缺点很明显:两次访问服务器而不是一次,以及探测属性并以某种方式将它们绑定到 Principal(或另一个 POJO)的额外代码。

    【讨论】:

      猜你喜欢
      • 2018-06-18
      • 2022-01-01
      • 2017-03-16
      • 2012-02-15
      • 1970-01-01
      • 2017-05-22
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多