1

我有 2 个不同的 webapp:

  • 向办公室用户显示客户简历的 CRM 网络应用程序
  • 面向客户用户的门户网站应用程序

我的 CRM webapp 使用LDAPManagerInMemoryManager的组合BasicAuthenticationFilterBasicAuthenticationEntryPoint 我的门户使用带有标准的经典 JDBC 管理器UsernamePasswordAuthenticationFilter

现在,我需要从我的 CRM webapp 透明地访问我的门户。

例如,我在办公室工作,使用 CRM webapp。一位客户打电话给我,询问有关 Portal 中提到的内容的解释。

我可以让办公室用户从 CRM 客户帐户页面中的 http 链接以客户身份访问门户。

所以我会绕过我LoginUrlAuthenticationEntryPoint并直接访问客户帐户。

在迈克尔帮助后编辑,我意识到我需要跟踪哪个 CRM 用户访问哪个门户帐户:
我的问题是:
-我应该使用PreAuthenticatedManager还是RunAsManager
- 我需要申报第二个EntryPoint吗?
- 怎么样AuthenticationFilters

- 是否可以在我的新门户 AbstractPreAuthenticatedProcessingFilter 中恢复从我的 CRM webapp 验证的用户 BASIC?

4

1 回答 1

0

从您的解释中,我有以下假设/结论:

1)CRM用户存储库和门户用户存储库有不同的用户

2) CRM 用户不应该知道门户用户密码

我认为您不需要使用 RunAsManager。(当您使用 RunAsManager 时,这意味着您首先在门户中以 CRM 用户身份进行身份验证,然后将身份验证替换为门户用户身份验证。我认为您不能针对门户用户存储库对 CRM 用户进行身份验证。)

我建议创建自己的“AuthenticateAs”功能:当 CRM 用户按下门户用户的 CRM 页面中的链接时,它将在门户中作为门户用户进行身份验证,而无需提供密码。

这个怎么运作?

1) 当 CRM 用户点击链接时,带有加密门户用户名的参数将添加到 URL。

2) 当请求以加密的门户用户名访问门户应用程序时,新创建的 PreAuthenticatedProcessingFilter 解密用户名并对用户进行身份验证

就是这样 :)

几个评论:

1)请使用AES-258算法加密/解密用户名

2) 请确保加密/解密的密钥不能被 HTTP 访问

3)您可以为您的 PreAuthenticatedProcessingFilter 扩展 AbstractPreAuthenticatedProcessingFilter

4) 我强烈建议在门户应用程序中创建两个角色:USER_WRITE_ROLE 和 USER_READ_ROLE。当 CRM 用户使用“AuthenticateAs”身份验证访问时 - 它应该获得 USER_READ_ROLE。当门户用户使用常规身份验证访问时 - 它应该获得 USER_WRITE_ROLE。

5)您应该考虑CRM用户将如何为门户用户执行注销(否则他总是会在第一个用户上工作)。我能想到的最简单的方法 - PreAuthenticatedProcessingFilter 应该处理每个请求(即使它已通过身份验证),并且它是否包含带有用户名的参数以清理门户用户会话并执行新的身份验证。

请告诉我您对该建议的看法,并告诉我您是否需要任何其他说明。

最好的祝福,

迈克尔

PS 在编辑问题后添加。在门户上跟踪 CRM 用户的最简单方法是将附加加密参数添加到带有 CRM 用户名的 URL

于 2013-03-01T19:10:51.010 回答