oracle weblogic OAM servlet 代理 - 如何传播 OAMAuthnCookie

oracle weblogic OAM servlet proxy - how to propagate OAMAuthnCookie

我正在尝试在 weblogic 版本 12.2.1.3 中使用 SSO。我们已将它与 OAM/OID 集成到一个由 Oracle Forms & Reports 组成的更大的应用程序中。除了 Forms 之外,我们还有各种需要从 Forms 调用的自定义 servlet-based 应用程序。

这很好。

因为身份验证发生在 Oracle 世界中,通过 OAM 登录屏幕,到目前为止,除了从 HTTP headers.

糟糕的是,有时我们需要我们的 servlet 作为 middle-man Forms 和 Reports 之间的角色。例如。我需要用 Reports(在服务器上)调用各种东西,转换它们并将它们发送回客户端。我知道这听起来不对 design-wise。但它仍然是遗留代码,我们需要让它工作 - 至少需要尝试..

以前我们习惯于在请求之间传递 cookie。但是在 11/12g OAM 中,我从 here 收集到成功 session 验证所需的 cookie (OAMAuthnCookie) 在到达我的 servlet 之前从请求中删除。这似乎确实发生了,基于我正在做的 header 转储,并在浏览器上使用 F12 开发人员工具跟踪调用。

所以..我已经收集到我需要生成一个新的 OAMAuthnCookie,或者可以创建它并将其附加到新的 http 调用的东西..我只是希望专家或处理过这个问题的人验证以下假设是否正确 - 唯一的方法是使用 OAM SDK(有点 non-intuitive 恕我直言)。

另一件事 - 我找到的许多关于 OAM SDK 的示例都处理登录表单。我不需要做用户认证,也不需要我自己和 OAM 对话来验证资源是否被保护。我正在处理一个已经过身份验证的请求 - 只需要以某种方式从 HttpServletRequest 获取 UserSession 和用户令牌,以便生成新的 OAMAuthnCookie 以便我的下一个请求(使用例如 apache 客户端)成功..我曾经假设这不会很难做到,但现在有点难过。

感谢您的关注。

使用 OAM SDK,据我草草地看到(在撰写本文时,我们正在使用 Weblogic 12c 和 Access Manager,它的行为与讨论 OAM 11g 的文档中描述的完全一致 - 因此我认为这是我们也在使用的版本),涉及

  • 从 OAM 控制台生成 ObAccessClient.xml,以在您正在处理的代码(将称为访问客户端)和 OAM 之间建立联系
  • 在您的应用程序中包含来自可下载的 OAM SDK 的 JAR
  • 在您的应用程序中编写代码(例如,在身份验证过滤器或 servlet 中)以通过其 SDK 与 OAM 建立通信,最终 authenticate/authorize 等

Oracle documentation here 中有关于如何编写代码的很好指南。

我还发现这些文章内容丰富:

我想到的代码最终会生成一个新的身份验证 cookie,我会将其传递给报告 servlet 以进行进一步授权(因为在到达我的应用程序之前,该 cookie 确实已从请求中删除)。根据 another Oracle A-Team article.

,我发现生成此类 cookie 的唯一方法是更改​​ OAM 控制台中的设置以在请求中包含另一个 cookie (OAM_IDENTITY_ASSERTION)

在上述调查的过程中,终于在Oracle论坛上无意中发现了this magic reply to a question。根据它,OAM 控制台中有一个用户设置,允许关闭 OAMAuthnCookie 的默认过滤。

filterOAMAuthnCookie=false

就我们而言,这非常适合我。事实上,在更改之后,有问题的 cookie 终于到达了我的应用程序,结果我能够将它传递给对 Oracle Reports 的后续请求,而无需使用 OAM SDK。