繁体   English   中英

将“密码到期”信息从Wildfly Server身份验证模块传递到远程EJB客户端

[英]Passing 'password expiration' information from Wildfly Server authentication module to remote EJB client

我们有一个Wildfly 10 JEE应用程序和一个使用远程EJ调用与服务器通信的java胖客户端。 使用wildfly服务器中的自定义登录模块完成身份验证。

现在我们需要使用密码到期的概念来增强此登录模块。 每当密码过期时,用户必须在登录过程中更改其密码。 登录模块使用JAAS回调和JAAS回调处理程序。 据我所知,我们可以使用LoginModule中的javax.security.auth.callback.TextInputCallback在执行登录时从用户请求新密码。

它如何与远程处理集成。 我们的胖客户端如何接收TextInputCallback以提供请求的输入? 我想我们必须在客户端注册一个自定义CallbackHandler来处理回调,但我没有找到任何关于如何使用Wildfly执行此操作的文档。 任何人都可以给我一些关于如何解决这个问题的文件或样本的提示吗?

在我看来,你走向了错误的方向。 使用将密码更改放入LoginModule的方法存在一些问题。

  • 用户登录通常是“安全”过程,即处理“没有”副作用。
  • 使用TextInputCallback来索取新护照至少是奇怪的。 TextInputCallback旨在向用户询问常规文本而不是密码,例如第二个身份验证因素,如(基于时间的)PIN实现CallbackHandler的客户端不知道它是一个密码,当在密码上显示时,该密码可能必须被屏蔽。 scren。
  • 该方法违反了LoginModule的单一责任原则 - LoginModule负责登录/验证用户。

请记住,通常对于密码更改,您需要经过身份验证/授权的用户,该用户必须通过重新输入其旧密码来确认密码更改,并且通常还提供用户可以重新输入其新密码的第二个字段。 只有一个xxxCallback似乎还不够。

即使一个人不应该使用Exceptions作为控制流我建议使用CredentialExpiredException来通知客户端用户必须更改密码。 这也是Oracle在其中一个WebLogic JAAS示例中执行此操作的方式

如果您仍然希望/需要将其放入自定义LoginModule那么我建议您定义自己的自定义Callback ,例如PasswordChangeCallbackConfirmPasswordCallbackNewPasswordCallbackVerifyNewPasswordCallback

您只需将它们添加到自定义LoginModule ,无需注册它们。 请记住,标准客户端可能会遇到这些额外回调问题。 然后,您的客户端必须实现相应的CallbackHandler

在JAAS中,有两种方法可以通过配置自定义默认CallbackHandler来自定义使用的CallbackHander *

来自CallbackHandler API文档

可以在auth.login.defaultCallbackHandler安全属性中指定默认的CallbackHandler类实现。 可以在名为/lib/security/java.security的文件中的Java安全属性文件中设置security属性。 是指java.home系统属性的值,并指定安装JRE的目录。

或者通过作为参数传递给LoginContext的构造函数。 LoginContext提供了两个接受CallbackHandler构造函数

public LoginContext(String name, CallbackHandler callbackHandler)
       throws LoginException


public LoginContext(String name, Subject subject,
       CallbackHandler callbackHandler) throws LoginException

请参阅LoginContext API文档

它如何与删除集成?

它应该与您已经这样做的方式相同。 没有太大区别。

我们的胖客户端如何收到TextInputCallback

通过CallbackHandler接口类似于PasswordCallback 您已经提到登录模块使用CallbackHandler

  void  handle(Callback[] callbacks)

如果您想知道如何实现handle方法, CallbackHandler API文档还提供了CallbackHandler handle方法的实现示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM