新手在JAAS认证; 使用URL栏中的令牌登录

我有一个有趣的项目要求,我们必须接受一个令牌作为GET参数,它将validation进入应用程序的用户。 这是为了允许受信任的第三方无缝地将用户发送到我们的站点,而无需再次登录。

例如: http : //www.myproj.com/appName/index.jsf?user_token = asdf123randomstuffaf12fsaasdf

appName将是上下文根,user_token将是可以检查的标记。 令牌将被使用一次,然后被丢弃,并且它们在生成后几秒钟到期。 令牌部分并不是我真正想要的,它是与JAAS的集成。

在Spring Security中,我可以设置一个filter来拦截请求,从URL中提取令牌,并针对UserDetailsS​​ervice对用户进行身份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对象)填充会话对象以表示成功。 更简单。