我有2个不同的webapp:
我的CRM网络应用使用LDAPManager
和InMemoryManager
与BasicAuthenticationFilter
和BasicAuthenticationEntryPoint
的组合
我的门户网站使用标准UsernamePasswordAuthenticationFilter
现在,我需要从我的CRM webapp透明地访问我的门户网站。
例如,我在CRM webapp上工作。客户给我打电话,询问有关Portal中提到的内容的解释。
我可以让办公室用户通过CRM客户帐户页面中的http链接作为客户访问Portal。
所以我会绕过我的LoginUrlAuthenticationEntryPoint
并直接访问客户帐户。
PreAuthenticatedManager
还是RunAsManager
?EntryPoint
吗?
- AuthenticationFilters
怎么样?答案 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