新手在JAAS认证; 使用URL栏中的令牌登录
我有一个有趣的项目要求,我们必须接受一个令牌作为GET参数,它将validation进入应用程序的用户。 这是为了允许受信任的第三方无缝地将用户发送到我们的站点,而无需再次登录。
例如: http : //www.myproj.com/appName/index.jsf?user_token = asdf123randomstuffaf12fsaasdf
appName将是上下文根,user_token将是可以检查的标记。 令牌将被使用一次,然后被丢弃,并且它们在生成后几秒钟到期。 令牌部分并不是我真正想要的,它是与JAAS的集成。
在Spring Security中,我可以设置一个filter来拦截请求,从URL中提取令牌,并针对UserDetailsService对用户进行身份validation。 遗憾的是,Spring Security在这个项目中无法解决各种问题,因此我们需要使用JAAS身份validation。
我不是要求代码,但我可以对需要编写的模块使用一些基本方向,以便继续我的研究。 感谢大家,
JAAS不适合Web应用程序。 它更适用于支持交互式输入和访问JVM管理的本地资源的桌面应用程序,例如文件,网络套接字。
但是如果你真的想要走JAAS之路,那就准备编写自定义的LoginModule,可能还有CallbackHandler和Principal。 最重要的类是LoginModule。 您可以重用一些现有的Principal类。
CallbackHandler会将令牌从URL中拉出来。 LoginModule将针对某个数据库查找该标记,并使用一些Principal填充传入的Subject。
这可能听起来令人困惑,因为条款非常接近(Subject vs Principal,LoginModule vs CallbackHandler)所以文档应该距离很近。
完成所有这些操作后,您还需要配置Web容器的策略以加载新的登录上下文(另一个非常相关的术语)。 这就像在Linux中配置PAM一样。 请您的管理员为您执行此操作。
但你还没有完成。 最后一项任务是编写一个(我假设您正在开发基于Java Servlet的东西)filter。 这个filter应该挂在第一层。 如果它看到一个特殊参数值(例如user_token),它将获取配置的LoginContext对象,并调用其login方法。
现在,如果你完全废弃JAAS,你可以只使用servletfilter。 在此filter中,如果身份validation成功,您可以使用自己的自定义对象(例如User对象)填充会话对象以表示成功。 更简单。