woe*_*fle 6 java authentication jaas java-ee wildfly
我们有一个Wildfly 10 JEE应用程序和一个使用远程EJ调用与服务器通信的java胖客户端.使用wildfly服务器中的自定义登录模块完成身份验证.
现在我们需要使用密码到期的概念来增强此登录模块.每当密码过期时,用户必须在登录过程中更改其密码.登录模块使用JAAS回调和JAAS回调处理程序.据我所知,我们可以使用LoginModule中的javax.security.auth.callback.TextInputCallback在执行登录时从用户请求新密码.
它如何与远程处理集成.我们的胖客户端如何接收TextInputCallback以提供请求的输入?我想我们必须在客户端注册一个自定义CallbackHandler来处理回调,但我没有找到任何关于如何使用Wildfly执行此操作的文档.任何人都可以给我一些关于如何解决这个问题的文件或样本的提示吗?
在我看来,你走向了错误的方向.使用将密码更改放入LoginModule的方法存在一些问题.
TextInputCallback要求新护照至少是奇怪的.这TextInputCallback意味着向用户询问常规文本而不是密码,例如第二个认证因素,如(基于时间的)PIN.实现a的客户端CallbackHandler不知道它是在scren上显示时可能必须被屏蔽的密码.请记住,通常对于密码更改,您需要经过身份验证/授权的用户,该用户必须通过重新输入其旧密码来确认密码更改,并且通常还提供用户可以重新输入其新密码的第二个字段.只有一个xxxCallback似乎还不够.
即使一个人不应该使用Exceptions控制流程,我建议使用a CredentialExpiredException来通知客户端用户必须更改密码.这也是Oracle在其中一个WebLogic JAAS示例中执行此操作的方式
我所有的言论后,如果你仍然想/需要把它放到自定义的LoginModule话,我会建议来定义自己的自定义CallbackS代表例如PasswordChangeCallback或ConfirmPasswordCallback,NewPasswordCallback,VerifyNewPasswordCallback
您可以简单地将它们添加到自定义LoginModule,无需注册它们.请记住,标准客户端可能会遇到这些额外回调问题.然后您的客户端必须实现相应的CallbackHandler.
在JAAS中,有两种方法可以CallbackHander
通过配置自定义默认CallbackHandler来自定义使用的*
可以在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
Run Code Online (Sandbox Code Playgroud)
它如何与删除集成?
它应该与您已经这样做的方式相同.没有太大区别.
我们的胖客户如何收到
TextInputCallback?
通过CallbackHandler接口类似于PasswordCallback.您已经提到登录模块使用了CallbackHandler.
void handle(Callback[] callbacks)
Run Code Online (Sandbox Code Playgroud)
如果您想知道如何实现该handle方法,CallbackHandlerAPI文档还提供了该CallbackHandler handle方法实现的示例.
| 归档时间: |
|
| 查看次数: |
225 次 |
| 最近记录: |