我们有两个相同的网站。一个位于apac.ourdomain.com,另一个位于eu.ourdomain.com。这些网站的唯一区别是一个在澳大利亚托管,另一个在伦敦。他们支持的数据库具有相同的模式,除了一个在澳大利亚,另一个在伦敦,每个都存储与我们在该地区的合作伙伴相关的数据。
我们想要做的是使用表单身份验证实现某种形式的集中登录页面@ www.ourdomain.com。合作伙伴登录www.ourdomain.com后,我们会将其重定向到apac或eu服务器。我的挑战是如何将用户凭据从登陆站点转移到区域站点?通过凭据,我的意思是从用户名到他们的角色/权限。一旦用户被重定向到区域网站,如果他们需要修改他们的详细信息,我如何让他们回到登陆网站?
我知道我需要为登陆站点提供一个集中的用户详细信息数据库,但是后来我不确定是与区域站点之间的通信。有什么指针吗?
答案 0 :(得分:0)
您可以在此公共数据库中只有一些基本信息,例如用户名和密码或密码哈希,视情况而定,但没有任何权限和内容。权限和其他此类信息可以/应该驻留在相应的区域数据库中。
当用户通过身份验证时,您基本上设置了一个cookie。 Cookie通常是加密的。但恰巧加密是机器特定的。除非您在配置文件中配置machineKey,否则期望它工作,其他服务器将无法工作 http://msdn.microsoft.com/en-us/library/ff649308.aspx
默认的ASP.NET设置可确保表单身份验证票证具有防篡改和加密功能,并且ViewState可防篡改。这可确保在服务器处理数据时检测到客户端计算机或网络上的ViewState或身份验证票证的任何修改。
Cookie是特定于域的,除非您在设置Cookie时指定根域,否则子域无法使用Cookie。
原则上,我们假设您自己设置一个cookie。此cookie包含userId作为值和日期时间。此信息已加密,并且为根域设置了cookie。然后,当您重定向到区域网站时,您可以提取cookie,解密并“自动登录”用户。
如果您依靠FormsAuthentication框架为您完成所有工作,那么您不能简单地调整设置以使其正常工作。现在您可以使用FormsAuthentication概念并进行自己的身份验证。但是如果你不熟悉Http和ASP.NET以及其它东西,这可能会太复杂。
另一种替代方案,可能更好,取决于事物需要的安全性,就是按照我之前描述的方式进行操作,区别在于当区域站点收到此重定向页面时,您可以通过使用常规http调用来确认中央数据库HttpWebRequest或类似于中央Web应用程序上的处理程序,以验证用户确实从您的中央系统获得此cookie。
另一个选择是为什么要打扰多个物理站点。只需托管一个中央系统,并根据日志使用的用户,连接到差异数据库,并且可能还有其他方面也会发生变化,但只有一个系统实例和一个域。