Spring Security:在我的CRM webapp和我的Front webapp之间共享安全性

时间:2013-03-01 15:05:40

标签: authentication spring-security entry-point

我有2个不同的webapp:

  • 一个CRM webapp,向客户显示客户简历
  • 面向客户用户的门户网站应用

我的CRM网络应用使用LDAPManagerInMemoryManagerBasicAuthenticationFilterBasicAuthenticationEntryPoint的组合 我的门户网站使用标准UsernamePasswordAuthenticationFilter

的经典JDBC管理器

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

例如,我在CRM webapp上工作。客户给我打电话,询问有关Portal中提到的内容的解释。

我可以让办公室用户通过CRM客户帐户页面中的http链接作为客户访问Portal。

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

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

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

1 个答案:

答案 0 :(得分:0)

我从你的解释中得到以下假设/结论:

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

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

我认为您不需要使用RunAsManager。 (当您使用RunAsManager时,它意味着您首先在门户中作为CRM用户进行身份验证,然后通过门户网站用户身份验证替换身份验证。我认为您不能根据门户网站用户存储库对CRM用户进行身份验证。)

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

它如何运作?

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

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

就是这样:))

几点意见:

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

2)请确保HTTTP无法访问加密/解密密钥

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

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

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

请告诉我您对该建议的看法,并告诉我您是否需要进一步澄清。

致以最诚挚的问候,

迈克尔

P.S。在编辑问题后添加。 在门户网站上跟踪CRM用户的最简单方法是使用CRM用户名将附加加密参数添加到URL