我有一个网站account.mysite.com,它只在我的系统中注册/登录用户。我想在一个网站上检查用户的电子邮件和密码,然后把一些东西发送到另一个网站,这肯定会决定谁登录。
我可以使用FormsAuthentication吗?
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(name, true, 60);
string encrypted = FormsAuthentication.Encrypt(ticket);
return "mysite.com?" + FormsAuthentication.FormsCookieName + "=" + encrypted;
或者我需要使用aspNet.Identity中的一些功能吗?如果是,我该怎么做?谢谢
如果您使用的是MVC 5,那么您也应该使用Identity。但是,无论您使用ASP.NET Membership(forms-auth)还是Identity,都与此无关。
简单地说,在任何一种方案中,都将设置一个authcookie。这决定了用户的"已登录"状态。对于每个请求,用户的浏览器都会将cookie发送回服务器,服务器会对其进行验证,并认为用户是否已通过身份验证。
因此,这一切都归结为确保auth cookie在您的不同网站之间共享,并且可以被您的每个网站读取和验证。
第一部分,cookie受到域的限制。如果cookie设置在account.mysite.com
上,则它将仅发送到account.mysite.com
。但是,您可以将其设置为通配符,以便将其发送到*.mysite.com
上的任何位置。这将允许account.mysite.com
设置cookie,并且仍然将其发送到类似subdomain.mysite.com
的东西。如果你有完全不同的域,比如account.mysite.com
,并且你想让它在foo.com
登录,那是不可能的。处理这种情况的唯一方法是设置一个SSO实现,它不是微不足道的,远远超出了这里可以合理回答的范围。整个公司都只致力于为组织设置SSO。
所以,假设您不处理不同的域,并且您至少可以让每个站点获得相同的cookie,那么下一部分就是对该cookie进行解密。authcookie在设置之前已加密,因此只有知道如何解密的网站才能读取。加密基于机器密钥,因此本质上,所有网站都需要共享相同的机器密钥。有关详细信息,请参阅:https://technet.microsoft.com/en-us/library/cc755177(v=ws.10).aspx