我们有一个 Wildfly 10 JEE 应用程序和一个使用远程 EJ 调用与服务器通信的 java 胖客户端。身份验证是使用 wildfly 服务器中的自定义登录模块完成的。
现在我们需要用密码过期的概念来增强这个登录模块。每当密码过期时,用户必须在登录过程中更改其密码。登录模块使用 JAAS 回调和 JAAS 回调处理程序。据我所知,我们可以在登录模块中使用 javax.security.auth.callback.TextInputCallback 在执行登录时向用户请求新密码。
这如何与远程处理集成。我们的胖客户端如何接收 TextInputCallback 以提供请求的输入?我想我们必须在客户端注册一个自定义的 CallbackHandler 来处理回调,但我还没有找到任何关于如何使用 Wildfly 执行此操作的文档。任何人都可以给我关于此类文档的提示或有关如何解决此问题的示例吗?
最佳答案
在我看来你走错了方向。 使用您将密码更改放入 LoginModule 的方法存在一些问题。
TextInputCallback 请求新护照至少很奇怪。
TextInputCallback 旨在要求用户提供常规文本而不是密码,例如第二个身份验证因素,如(基于时间的)PIN
实现 CallbackHandler 的客户端不知道它是一个密码,当显示在屏幕上时可能必须屏蔽该密码。请记住,通常对于密码更改,您需要经过身份验证/授权的用户,该用户必须通过重新输入他的旧密码来确认密码更改
并且通常还提供第二个字段,用户可以在其中重新输入他的新密码。只有一个 xxxCallback 似乎还不够。
即使是控制流也不应该使用 Exceptions 我建议使用 CredentialExpiredException 来向客户端发出用户必须更改的信号
密码。这也是 Oracle 在 WebLogic JAAS Examples 之一中执行此操作的方式。
在我的所有评论之后,如果您仍然想要/需要将其放入自定义 LoginModule 中,那么我建议定义您自己的自定义 Callback
例如 PasswordChangeCallback 或 ConfirmPasswordCallback、NewPasswordCallback、VerifyNewPasswordCallback
您只需将它们添加到自定义 LoginModule 即可,无需注册它们。请记住,标准客户端可能会遇到这些额外回调的问题。
然后,您的客户端必须实现相应的 CallbackHandler。
在 JAAS 中,有两种方法可以自定义使用的 CallbackHander
* 通过配置自定义默认 CallbackHandler
来自CallbackHandler API documentaion
A default CallbackHandler class implementation may be specified in the auth.login.defaultCallbackHandler security property. The security property can be set in the Java security properties file located in the file named /lib/security/java.security. refers to the value of the java.home system property, and specifies the directory where the JRE is installed.
或者作为参数传递给 LoginContext 的构造函数。
LoginContext 提供了两个接受 CallbackHandler
public LoginContext(String name, CallbackHandler callbackHandler)
throws LoginException
public LoginContext(String name, Subject subject,
CallbackHandler callbackHandler) throws LoginException
参见 LoginContext API Documentation
How does it integrate with removing?
它应该和你已经做过的一样。区别不大。
How does our fat client receive the
TextInputCallback?
通过CallbackHandler 接口(interface),类似于PasswordCallback。您提到登录模块使用 CallbackHandler。
void handle(Callback[] callbacks)
如果您想知道如何实现handle 方法CallbackHandler API Documentation还提供了 CallbackHandler handle 方法的实现示例。
关于java - 将 'password expiration' 信息从 Wildfly 服务器身份验证模块传递到远程 EJB 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44004932/
我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou
我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t
我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..
我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>BootingWEBrick=>Rails3.2.1applicationstartingindevelopmentonhttp://0.0.0.0:3000=>Callwith-dtodetach=>Ctrl-CtoshutdownserverExiting/Users/vinayshenoy/.rvm/gems/ruby-1.9.3-p0/gems/actionmailer-3.2.1/lib/action_mailer
在MRIRuby中我可以这样做:deftransferinternal_server=self.init_serverpid=forkdointernal_server.runend#Maketheserverprocessrunindependently.Process.detach(pid)internal_client=self.init_client#Dootherstuffwithconnectingtointernal_server...internal_client.post('somedata')ensure#KillserverProcess.kill('KILL',
我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby1.9+ 关于ruby-主要:Objectwhenrun
我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳
我已经像这样安装了一个新的Rails项目:$railsnewsite它执行并到达:bundleinstall但是当它似乎尝试安装依赖项时我得到了这个错误Gem::Ext::BuildError:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcheckingforlibkern/OSAtomic.h...yescreatingMakefilemake"DESTDIR="cleanmake"DESTDIR="
我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/
最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru