如何仅使用站点之间的AspNet.Identity发送和接收身份验证票证

时间:2016-04-05 13:52:43

标签: c# asp.net-mvc asp.net-identity

我有一个网站 - account.mysite.com,它只在我的系统中注册/登录用户。 我想在一个站点检查用户的电子邮件和密码,并将内容发送到另一个站点,这确定了谁登录。

我可以使用FormsAuthentication吗?

    FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(name, true, 60);
    string encrypted = FormsAuthentication.Encrypt(ticket);
    return "mysite.com?" + FormsAuthentication.FormsCookieName + "=" + encrypted;

或者我是否需要使用aspNet.Identity的一些功能?如果是的话,我怎么能这样做? 感谢。

1 个答案:

答案 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