我有一个网站 - account.mysite.com,它只在我的系统中注册/登录用户。 我想在一个站点检查用户的电子邮件和密码,并将内容发送到另一个站点,这确定了谁登录。
我可以使用FormsAuthentication吗?
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(name, true, 60);
string encrypted = FormsAuthentication.Encrypt(ticket);
return "mysite.com?" + FormsAuthentication.FormsCookieName + "=" + encrypted;
或者我是否需要使用aspNet.Identity的一些功能?如果是的话,我怎么能这样做? 感谢。
答案 0 :(得分:1)
如果你正在使用MVC 5,那么你也应该使用Identity。但是,无论您使用ASP.NET成员身份(表单身份验证)还是身份都与此无关。
简单地说,在任一方案中,都会设置一个身份验证cookie。这就决定了用户登录"状态。对于每个请求,用户的浏览器将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。 auth cookie在设置之前已加密,因此只能由知道如何解密它的站点读取。加密基于机器密钥,因此基本上,您的所有站点都需要共享相同的机器密钥。有关详细信息,请参阅:https://technet.microsoft.com/en-us/library/cc755177(v=ws.10).aspx