我想在Java EE应用程序服务器(特别是Wildfly)中提供WebSocket聊天服务器。
聊天协议是XMPP,它使用SASL(简单身份验证和安全层)。 用户必须先进行身份验证,然后才能聊天。
问题1 : 我想保持灵活性,以便可以使用其他身份验证提供程序,例如针对application-users.properties文件中配置的Wildfly用户进行身份验证,或者针对LDAP服务器或自定义身份验证服务器之类的任何其他后端进行身份验证。
为简单起见,我从PLAIN身份验证开始。我的问题是当我打电话时
Sasl.createSaslServer(auth.getMechanism(), "xmpp", "", Collections.emptyMap(), callbacks -> {});
我得到:
org.wildfly.security.sasl.plain.PlainSaslServer
它也需要特定于Wildfly的回调实现,我想避免这种情况。
我可能可以编写并提供自己的SaslServer实现,但是那如何对不同的后端进行身份验证? 我以为我必须将SaslServer与LoginModule结合起来?
但是here我发现了这一点:
但是,当您拥有SaslServer时会发生什么(您需要对之进行操作 提供一个CallbackHandler来验证和验证用户) 您需要绑定到一个JAAS LoginModule(您还需要绑定到该模块) 在服务器端提供CallbackHandler)?好吧,那行不通。 完全没有。
问题2 :
即使我设法验证WebSocket会话,如何将其标记为已验证?
我想使用安全角色,例如经过身份验证的聊天客户端调用不允许调用的方法时,我想返回一个错误。
我想与javax.annotation.security.*
合作,例如@RolesAllowed
注释。
感谢帮助和提示。
编辑:不必是JAAS。如果这里有用,我已经读过有关JASPI的信息。