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。 所以如果你想在不同的子域上使用同一个应用程序的两个实例,那么你需要为每个应用程序设置相同的机器密钥。
总之:
- CookieDomain =“.myapp.com”
-
在每个应用程序的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" />