我认为我对WebLogic的AuthenticationProviders
有一个高水平的了解,但是我无法理解如何将用户凭据传递给提供程序。
在阅读JAAS时,我认为我已经掌握了如何使用LoginContext
进行登录的知识。 LoginContext
从JAAS配置文件中选取LoginModule
和JAAS选项。通过定义某些CallbackHandler
的实例,您可以传递用户凭据。调用LoginContext.login()
后,使用关联的LoginModule
执行登录。
在查阅AuthorizationProviders
上Oracle的文档之后,大多数内容似乎非常简单。 AuthenticationProvider
利用JAAS执行登录。似乎AuthenticationProvider
在内部管理LoginContext
。
我很难理解/发现的是WebLogic如何管理LoginContext
和CallbackHandler
并最终传递给LoginModule.initialize
方法。
应用程序:
当前,应用程序使用表单登录名并通过“ j_security_check”操作提交。有一个自定义AuthenticationProvider
和LoginModule
用于处理登录并处理表单中提交的用户名和密码。
我假设WebLogic可以在内部处理“ j_security_check”操作,并且知道如何将表单输入字段映射到传递到自定义CallbackHandler
的{{1}}。
我正在尝试创建第二个登录过程,该过程涉及从HTTP请求标头中提取凭证(用户名/密码)。当前使用servlet过滤器提取凭证。一种或另一种方式,我想将这些凭据传递给表单登录名已经到位的LoginModule
。
我想执行以下一项操作:
LoginModule
(通过某些自定义AuthenticationProvider
实现和/或配置)AuthenticationProvider
。 如何将标头凭据传递给AuthenticationProvider
?
LoginModule
可以从标头中提取用户名和密码?您能描述从请求到登录的流程吗?AuthenticationProvider
使用的CallbackHandler
或LoginContext
?这样,我就可以将凭据传递给AuthenticationProvider
我自己。AuthenticationProvider
?我很可能在此过程中遗漏了一些关键概念,所以请随意将我提到的内容带入正确的轨道。
谢谢!
答案 0 :(得分:1)
我对了解WebLogic AuthenticationProviders
的最大困扰是在了解如何传递凭据。似乎有很多事情“自动地”发生在幕后。我觉得我不得不以某种方式访问WebLogic在后台操纵的LoginContext
和/或CallbackHandler
。我在正确的轨道上,但是错过了有关JAAS身份验证的重要信息...
Authentication Providers - How JAAS Works With the WebLogic Security Framework
JAAS认证的步骤3和4如下:
WebLogic Server容器调用WebLogic安全框架。 如果有一个包含以下内容的客户端CallbackHandler 身份验证信息,此信息传递到WebLogic安全性中 框架。
对于每个配置的身份验证提供程序,WebLogic安全框架都使用身份验证创建一个CallbackHandler 传入的信息。 (这些是内部CallbackHandlers 由WebLogic安全框架在服务器端创建,并且 与客户端的CallbackHandler无关。)
这是让我失望的部分。我的头脑在CallbackHandler
上传递了WebLogic身份验证信息。我无法接听步骤结尾处显示的注释:
注意:
对于完全在服务器端执行的身份验证,该过程 将从步骤3开始,然后WebLogic Server容器将调用 之前的weblogic.security.services.authentication.login方法 步骤4。
Authentication - Method Summary
您不知道吗?Authentication
有四个login
方法,每个方法都接受一个CallbackHandler
!
对于我来说,我可以使用servlet过滤器从请求标头中选择凭证,将其传递给CallbackHandler
,然后调用Authentication.login(CallbackHandler callbackHandler)
以使用自定义{{1 }}。
答案 1 :(得分:0)
这是一个旧线程,但是我觉得值得添加的一个容器不可知选项是调用httpRequest.login(username,password)方法。