我有一个有趣的项目要求,我们必须接受一个令牌作为get参数,它将验证进入应用程序的用户。这是为了允许受信任的第三方无缝地将用户发送到我们的站点,而不必让他们再次登录。
例如:
http://www.myproj.com/appName/index.jsf?user_token=asdf123randomstuffaf12fsaasdf
appname将是上下文根,user_token将是可以检查的令牌。令牌将使用一次,然后丢弃,它们在生成后几秒过期。代币部分并不是我真正挂念的,而是与jaas的集成。
在spring security中,我可以设置一个过滤器来拦截请求,从url中提取令牌,并根据userdetailsservice对用户进行身份验证。遗憾的是,由于很多问题,spring安全性在这个项目上不可用,因此我们需要使用jaas身份验证。
我不是要代码,但我可以用一些基本的指导来说明需要编写哪些模块,这样我才能继续我的研究。谢谢大家,

最佳答案

jaas并不真正适合web应用程序。它更适用于支持交互输入和访问由jvm管理的本地资源(如文件、网络套接字)的桌面应用程序。
但是,如果您真的想沿着jaas的道路走下去,请准备编写您的自定义loginmodule,可能还要编写一个callbackhandler和principal。最重要的类是loginmodule。您可能可以重用一些现有的主体类。
callbackhandler将从url中提取令牌。loginmodule将根据某个数据库查找该标记,并用一些主体填充传入的主题。
这听起来可能很混乱,因为这些术语非常接近(subject与principal、loginmodule与callbackhandler),所以文档应该距离很近。
完成所有这些之后,还需要配置web容器的策略以加载新的登录上下文(另一个非常相关的术语)。这就像在linux中配置pam一样。请您的管理员为您执行此操作。
但你还没说完。最后一个任务是编写一个(我假设您正在开发基于JavaServlet的东西)过滤器。这个过滤器应该在第一层上钩住。如果它看到一个特殊的参数值(例如user_token),它将获取配置的logincontext对象,并调用其登录方法。
现在,如果完全放弃jaas,您可以只使用servlet过滤器。在此筛选器中,如果身份验证成功,则可以使用自己的自定义对象(如用户对象)填充会话对象以表示成功。更简单。

关于java - JAAS认证的新手;使用网址栏中的 token 登录,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5252940/

10-09 20:48