jjzjj

java - 将 'password expiration' 信息从 Wildfly 服务器身份验证模块传递到远程 EJB 客户端

coder 2024-03-31 原文

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

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

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

最佳答案

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

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

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

即使是控制流也不应该使用 Exceptions 我建议使用 CredentialExpiredException 来向客户端发出用户必须更改的信号 密码。这也是 Oracle 在 WebLogic JAAS Examples 之一中执行此操作的方式。

在我的所有评论之后,如果您仍然想要/需要将其放入自定义 LoginModule 中,那么我建议定义您自己的自定义 Callback 例如 PasswordChangeCallbackConfirmPasswordCallbackNewPasswordCallbackVerifyNewPasswordCallback

您只需将它们添加到自定义 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/

有关java - 将 'password expiration' 信息从 Wildfly 服务器身份验证模块传递到远程 EJB 客户端的更多相关文章

  1. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是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

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  4. ruby-on-rails - Rails 3.2.1 中 ActionMailer 中的未定义方法 'default_content_type=' - 2

    我在我的项目中添加了一个系统来重置用户密码并通过电子邮件将密码发送给他,以防他忘记密码。昨天它运行良好(当我实现它时)。当我今天尝试启动服务器时,出现以下错误。=>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

  5. ruby - 在 jRuby 中使用 'fork' 生成进程的替代方案? - 2

    在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',

  6. ruby - 主要 :Object when running build from sublime 的未定义方法 `require_relative' - 2

    我已经从我的命令行中获得了一切,所以我可以运行rubymyfile并且它可以正常工作。但是当我尝试从sublime中运行它时,我得到了undefinedmethod`require_relative'formain:Object有人知道我的sublime设置中缺少什么吗?我正在使用OSX并安装了rvm。 最佳答案 或者,您可以只使用“require”,它应该可以正常工作。我认为“require_relative”仅适用于ruby​​1.9+ 关于ruby-主要:Objectwhenrun

  7. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  8. ruby-on-rails - 新 Rails 项目 : 'bundle install' can't install rails in gemfile - 2

    我已经像这样安装了一个新的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="

  9. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  10. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的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

随机推荐