ASP.NET身份Cookie跨子域

对于表单身份validation,我在web.config中使用了这个(注意域属性):

<authentication mode="Forms"> <forms loginUrl="~/Account/Login" timeout="2880" name=".ASPXAUTH" protection="Validation" path="/" domain=".myserver.dev" /> </authentication> 

在Mvc 5中,如何为新的ASP.NET Identity Frameworkconfiguration跨子域的单点login?

更多信息:

我正在创build一个多租户应用程序。 每个客户将在一个子域上:

client1.myapp.com

client2.myapp.com

我希望用户能够login到client1.myapp.com ,然后访问client2.myapp.com并仍然可以login。使用表单身份validation很容易。 我试图找出如何使用新的身份框架来做到这一点。

编辑

这是最终为我工作的代码:

 app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = "Application", LoginPath = "/Account/Login", CookieDomain = ".myapp.com" }); 

在Startup.Auth.cs中,您将看到如下所示的内容:

对于RC:

 app.UseSignInCookies(); 

这在RTM中被删除,并replace为cookie auth的显式configuration:

  app.UseCookieAuthentication(new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Account/Login") }); 

CookieAuthenticationOptions类有一个CookieDomain属性,这是你正在寻找我相信。

这让我疯狂,直到我得知Identity 2.0仍然依赖于机器密钥来encryptionauthenticationcookie。 所以如果你想在不同的子域上使用同一个应用程序的两个实例,那么你需要为每个应用程序设置相同的机器密钥。

总之:

  1. CookieDomain =“.myapp.com”
  2. 在每个应用程序的Webconfiguration中设置相同的机器密钥

     <system.web> <machineKey decryptionKey="EEEB09D446CCFE71B82631D37DEDCC917B8CB01EC315" validationKey="60E4EFE8DD26C4BF8CDAEDCA10716C85820839A207C56C8140DB7E32BE04630AD631EDF25C748D0F539918283C5858AF456DBE208320CFFA69244B4E589" /> </system.web> 

这个答案导致我设置值: ASP.NET身份2使用machinekey散列密码?

您需要在web.config中为所有网站/应用程序设置相同的machineKey。

所有的网站都必须至less有这个configuration。

http://msdn.microsoft.com/en-us/library/w8h3skw9(v=vs.85).aspx

 <system.web> <authentication mode="Forms"> <forms loginUrl="~/Account/Login" timeout="2880" name=".ASPXAUTH" protection="Validation" path="/" domain=".myserver.dev" /> </authentication> <machineKey validationKey="C50B3C89CB21F4F1422FF158A5B42D0E8DB8CB5CDA1742572A487D9401E3400267682B202B746511891C1BAF47F8D25C07F6C39A104696DB51F17C529AD3CABE" decryptionKey="8A9BE8FD67AF6979E7D20198CFEA50DD3D3799C77AF2B72F" validation="SHA1" decryption="Auto"/> </system.web> 

这是一个例子

在Startup.Auth.cs文件中,将CookieDomain参数添加到您的域中:

 var cookieAuthenticationOptions = new CookieAuthenticationOptions { AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie, LoginPath = new PathString("/Account/Login"), CookieDomain = ".mydomain.com" }; 

那么对于所有网站你需要设置一个独特的机器密钥。 生成一个新的最简单的方法是使用IIS:

在您的网站上find“机器钥匙”选项:

在这里输入图像说明

点击“生成密钥”button获取您的密钥。

在这里输入图像说明

最后,上面的过程将添加到您的web.config以下,你需要确保这是复制到您的每个网站。

 <machineKey validationKey="DAD9E2B0F9..." decryptionKey="ADD1C39C02..." validation="SHA1" decryption="AES" />