我有一个有趣的项目要求,我们必须接受令牌作为 GET 参数,以对进入应用程序的用户进行身份验证。这是为了允许受信任的第三方将用户无缝地发送到我们的网站,而无需让他们再次登录。
一个例子可能是:http://www.myproj.com/appName/index.jsf?user_token=asdf123randomstuffaf12fsaasdf
appName 将是上下文根, user_token 将是可以检查的令牌。令牌将使用一次,然后被丢弃,并且它们在生成后几秒钟后过期。令牌部分并不是我真正关心的,它是与 JAAS 的集成。
在 Spring Security 中,我可以设置一个过滤器来拦截请求,从 URL 中提取令牌,并根据 UserDetailsService 对用户进行身份验证。遗憾的是,由于许多问题,Spring Security 在该项目中不可用,因此我们需要使用 JAAS 身份验证。
我不是要求代码,但我可以使用一些关于需要编写哪些模块的基本方向,以便我可以继续我的研究。感谢大家,
JAAS 不太适合 Web 应用程序。它更适用于支持交互式输入和访问 JVM 管理的本地资源(例如文件、网络套接字)的桌面应用程序。
但如果您确实想走 JAAS 之路,请准备编写自定义 LoginModule 以及可能的 CallbackHandler 和委托人。最重要的类是 LoginModule。您也许可以重用一些现有的 Primary 类。
CallbackHandler 将从 URL 中提取令牌。 LoginModule 会根据某个数据库查找该令牌,并用一些主体填充传入的主题。
这可能听起来令人困惑,因为术语非常接近(Subject 与 Primary、LoginModule 与 CallbackHandler),因此文档应该相距很近。
完成所有这些后,您还需要配置 Web 容器的策略来加载新的登录上下文(另一个非常相关的术语)。这就像在 Linux 中配置 PAM。请您的管理员为您执行此操作。
但你还没有完成。最后一个任务是编写一个(我假设您正在开发基于 Java Servlet 的东西)过滤器。这个过滤器应该挂在第一层。如果它看到特殊参数值(例如 user_token),它将获取配置的 LoginContext 对象,并调用其登录方法。
现在,如果您完全放弃 JAAS,您可以只使用 servlet 过滤器。在此过滤器中,如果身份验证成功,您可以使用您自己的自定义对象(例如 User 对象)填充会话对象以表示成功。简单多了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)