为了账号安全,请及时绑定邮箱和手机立即绑定

如何将用户凭据传递给 WebLogic 11g 身份验证提供程序?

如何将用户凭据传递给 WebLogic 11g 身份验证提供程序?

慕无忌1623718 2021-08-25 10:10:18
我想我对 WebLogic 的AuthenticationProviders.我的理解在阅读 JAAS 时,我想我已经掌握了如何使用 aLoginContext来执行登录。在LoginContext上拿起LoginModule从JAAS配置文件和JAAS选项。通过定义 some 的实例CallbackHandler,您可以传递用户凭据。调用后LoginContext.login(),使用关联的LoginModule.在浏览了 Oracle 上的文档后AuthorizationProviders,大部分内容看起来非常简单。AnAuthenticationProvider利用 JAAS 执行登录。看起来像AuthenticationProvider一个LoginContext内部管理一个。我很难掌握/发现的是 WebLogic 如何管理LoginContext以及CallbackHandler最终传递给LoginModule.initialize方法的 。情况该应用程序:在 WebLogic 11g (10.3.6) 上运行的 Java Web 应用程序。尝试使用用户名和密码进行身份验证,而无需表单登录。目前,该应用程序使用表单登录并使用“j_security_check”操作提交。有一个自定义AuthenticationProvider,LoginModule它处理登录并处理表单中提交的用户名和密码。我假设 WebLogic 可以在内部处理“j_security_check”操作,并且知道如何将表单输入字段映射到CallbackHandler传递给自定义LoginModule.我的目标我正在尝试创建第二个登录过程,该过程涉及从 HTTP 请求标头中提取凭据(用户名/密码)。当前使用 servlet 过滤器提取凭据。以一种或另一种方式,我想将这些凭据传递给LoginModule表单登录已经存在的凭据。我想执行以下操作之一:直接从标题中获取凭据并将它们传递给AuthenticationProvider(通过一些自定义AuthenticationProvider实现和/或配置)使用 servlet 过滤器提取标头凭据并手动将它们传递到AuthenticationProvider.我的问题我该怎么做才能将标头凭据传递给LoginModule?是否有AuthenticationProvider可以从标题中提取用户名和密码的预定义?你能描述一下从请求到登录的流程吗?有什么方法可以访问CallbackHandler或LoginContext使用的AuthenticationProvider?这样我就可以将凭据传递给AuthenticationProvider自己。WebLogic 如何知道从何处获取用户凭据以及如何将它们绑定到特定的凭据AuthenticationProvider?我很可能在此过程中遗漏了一些关键概念,因此请随时将我提到的任何内容放在正确的轨道上。谢谢!
查看完整描述

2 回答

?
慕斯王

TA贡献1864条经验 获得超2个赞

我理解 WebLogic 的最大障碍AuthenticationProviders是理解如何传递凭据。似乎有太多事情在幕后“自动”发生。我觉得我必须以某种方式访问一个LoginContext和/或CallbackHandler在后台操作的 WebLogic。我在正确的轨道上,但错过了一些关于 JAAS 身份验证的重要内容......

JAAS 身份验证的第 3 步和第 4 步如下所示:

  1. WebLogic Server 容器调用 WebLogic 安全框架。如果存在包含身份验证信息的客户端 CallbackHandler则会将其传递到 WebLogic 安全框架中

  2. 对于每个配置的身份验证提供程序,WebLogic 安全框架使用传入的身份验证信息创建一个 CallbackHandler 。(这些是由 WebLogic 安全框架在服务器端创建的内部 CallbackHandler,与客户端的 CallbackHandler 无关。)

这是让我失望的部分。我的思绪被CallbackHandler传递到 WebLogic 的身份验证信息上。我没能听懂步骤末尾显示的注释:

注意

对于完全在服务器端执行的身份验证,该过程将从步骤 3 开始,WebLogic Server 容器将在步骤 4 之前调用 weblogic.security.services.authentication.login 方法。

你难道不知道吗……Authentication有四种login方法,每一种都接受一个CallbackHandler!

对于我的情况,我可以使用 servlet 过滤器从请求标头中挑选凭据,将它们传递给CallbackHandler,然后调用Authentication.login(CallbackHandler callbackHandler)以使用自定义LoginModule.


查看完整回答
反对 回复 2021-08-25
  • 2 回答
  • 0 关注
  • 150 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信