0

OpenAMjava重型客户端使用受保护的servlet进行身份验证的正确方法是什么?

JavaopenAM sdk存在,我使用过它,它确实提供了对 SSO 令牌的访问。当同一个重型Java客户端尝试将序列化对象发送到受保护的 tomcat 7 (tomee+) servlet时,事情SSO Token id就会崩溃cookieOpenAM过滤器使用包含凭据的嵌入/隐藏表单进行重定向。这会破坏序列化对象通信。

那么,让 Java 重型客户端进行身份验证以便它可以将序列化对象来回发送到受保护的 servlet 的正确方法是什么?这甚至可能吗?

4

1 回答 1

1

有几种方法可以验证客户端:

  • 使用 REST API 对客户端进行身份验证(/identity/authenticate 或 /json/authenticate)
  • 使用 ClientSDK AuthContext API
  • 向 /UI/Login 发送 POST 请求(不一定是最好的方式..)

获取令牌后,您唯一需要确保的是将会话 cookie 发送到受保护的页面。如果您收到 JAAS 的自提交表单,则意味着您在 J2EE_POLICY 或 ALL 模式下使用代理,并且启用了 Java EE 声明性安全性。此问题区域的可能解决方案:

  • 修改客户端,使其处理 JAAS FORM 登录内容(即获取输入值并手动执行 POST),之后您可能还必须将 JSESSIONID 与所有请求一起发送。
  • 考虑在 web.xml 中删除对您的 servlet 的保护,这样容器就不会尝试显示 JAAS 登录表单,但这也意味着您也不会拥有花哨的 JAAS 集成(isUserInRole/getRemoteUser/@RolesAllowed/ ETC)
  • 将您的 servlet 移动到一个单独的应用程序,该应用程序可以在不同的代理过滤模式(URL_POLICY/SSO_ONLY)中受到保护,它仍然会受到保护,但再次没有 JAAS 集成。

基本上,在不处理基于表单的登录的情况下,我想不出一种简单的方法来利用 JAAS 集成和使用重型客户端。在某个时间点,我能够实现一个 Java EE 应用程序客户端,该客户端通过了容器的身份验证(代理的)领域使用编程登录并且有效,但我不认为您的重型客户端实际上是Java EE应用程序客户端..

于 2014-02-04T17:49:18.140 回答