当前位置: 首页 > 面试题库 >

JAAS认证的新手;使用网址栏中的令牌登录

蒯慈
2023-03-14
问题内容

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

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

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

在Spring
Security中,我可以设置一个过滤器,该过滤器将拦截请求,将令牌从URL中拉出,并根据UserDetailsS​​ervice对用户进行身份验证。遗憾的是,由于存在许多问题,Spring
Security在该项目上不可用,因此我们将需要使用JAAS身份验证。

我不是在问代码,但是我可以对需要编写哪些模块使用一些基本的指导,以便我继续研究。感谢大家,


问题答案:

JAAS并不真正适合于Web应用程序。对于台式机应用程序来说更是如此,它支持交互式输入并访问由JVM管理的本地资源,例如文件,网络套接字。

但是,如果您真的想走JAAS之路,请准备编写自定义的LoginModule以及可能的CallbackHandler和Principal。最重要的类是LoginModule。您也许可以重用一些现有的Principal类。

CallbackHandler会将令牌从URL中拉出。LoginModule将根据某些数据库查找该令牌,并使用某些Principal填充传入的Subject。

这听起来有些混乱,因为这些术语非常接近(主题与主体,LoginModule与CallbackHandler),因此文档应该相距很近。

完成所有这些操作后,还需要配置Web容器的策略以加载新的登录上下文(还有另一个非常相关的术语)。这就像在Linux中配置PAM。请您的管理员为您执行此操作。

但是您还没有完成。最后一个任务是编写一个(我假设您正在开发基于Java
Servlet的东西)过滤器。此过滤器应在第一级挂接。如果看到特殊的参数值(例如user_token),它将获取配置的LoginContext对象,并调用其login方法。

现在,如果您完全废弃了JAAS,则可以只使用servlet过滤器。在此过滤器中,如果身份验证成功,则可以使用自己的自定义对象(例如User对象)填充会话对象以表示成功。简单得多。



 类似资料:
  • 我正在努力围绕JWT身份验证进行思考。我读了很多文章和SO问题,但是其中一些已经过时了,我仍然没有得到满意的答案。 我读过这个SO问题,从JoséF.Romaniello的回答中我明白: 使用刷新令牌,客户端在旧的访问令牌过期之前请求新的访问令牌(这是正常的,预期行为) 在移动应用上,代币永不过期 同样在 auth0 上它说: 您可以请求新的访问令牌,直到刷新令牌在DenyList上。应用程序必须

  • 我试图与谷歌云存储使用凭证令牌进行身份验证。在node.jsGCS api文档中找不到关于如何做到这一点的示例。它们指示生成并下载包含私钥的json文件,然后链接到文件系统上的路径,如下所示: 这个很好用。 然而,我不想将我的密钥保存为JSON文件,而是创建凭据并将其保存为环境变量: 我尝试使用服务号HMAC访问密钥从桶的设置、互操作性菜单中获取此令牌。 当我尝试使用上面的身份验证方法从bucke

  • 我的webapp使用amazon cognito托管UI进行登录页面。因此,在成功登录后,cognito将用户重定向到我的webapp,我的webapp收到jwt令牌,其中包含id令牌、访问令牌、过期时间等。现在这个令牌有过期时间,我希望在我的令牌过期之前获得新的id令牌,以保持用户会话继续进行。 我已经在amazon cognito sdk上搜索了下面URL上的预认证场景。https://doc

  • 访问令牌的期限为7天,如果client在3天内返回,则通过现有的访问令牌对用户进行身份验证。 如果访问令牌已经超过3天,服务器将使用user_id查询存储在数据库中的刷新令牌。此时,如果刷新令牌有效,服务器将尝试重新发布7天访问令牌。 我想用这种方式来管理用户,这样做对吗?

  • 我通过以下方式进行身份验证 首先,我通过以下方式对AWS进行身份验证 我刚刚发现我可以用下面的命令重新配置,但我很好奇这是否是处理它的正确方法,以及是否有任何其他AWS方法提供。

  • 最后,我实现了UserDetailsService接口