对于表单身份验证,我在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 Framework配置子域之间的单点登录?
更多信息:
我正在创建一个多租户应用程序。每个客户端都在子域中:
client1.myapp.com
client2.myapp.com
我希望用户能够登录client1.myapp.com
,然后转到client2.myapp.com
并仍然可以登录。使用表单身份验证很容易。我正在试图弄清楚如何使用新的Identity Framework来实现它。
修改
以下是最终适合我的代码:
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = "Application",
LoginPath = "/Account/Login",
CookieDomain = ".myapp.com"
});
答案 0 :(得分:34)
在Startup.Auth.cs中,您将看到如下内容:
RC的:
app.UseSignInCookies();
这已在RTM中删除,并替换为cookie auth的显式配置:
app.UseCookieAuthentication(new CookieAuthenticationOptions {
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
CookieAuthenticationOptions类有一个CookieDomain属性,我相信你正在寻找它。
答案 1 :(得分:14)
这让我疯狂,直到我得知Identity 2.0仍然依赖于机器密钥来加密身份验证cookie。因此,如果您想在不同的子域上使用同一个应用程序的两个实例,则需要为每个应用程序设置相同的机器密钥。
总结如此:
在每个应用程序的Web配置中设置相同的机器密钥
<system.web>
<machineKey decryptionKey="EEEB09D446CCFE71B82631D37DEDCC917B8CB01EC315" validationKey="60E4EFE8DD26C4BF8CDAEDCA10716C85820839A207C56C8140DB7E32BE04630AD631EDF25C748D0F539918283C5858AF456DBE208320CFFA69244B4E589" />
</system.web>
这个答案促使我设定了价值观: Does ASP.NET Identity 2 use machinekey to hash the password?
答案 2 :(得分:13)
您需要在web.config中为所有网站/应用程序设置相同的machineKey。
所有网站必须至少具有此配置。
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>
这是一个例子
答案 3 :(得分:12)
在Startup.Auth.cs文件中,在您的域中添加CookieDomain
参数:
var cookieAuthenticationOptions = new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
CookieDomain = ".mydomain.com"
};
然后,对于所有网站,您需要设置唯一的机器密钥。生成新的最简单方法是使用IIS:
找到&#34;机器密钥&#34;您网站上的选项:
点击&#34;生成密钥&#34;按钮来获取你的钥匙。
最后,上述过程会将以下内容添加到您的web.config
,您需要确保将其复制到您的每个网站中。
<machineKey
validationKey="DAD9E2B0F9..."
decryptionKey="ADD1C39C02..."
validation="SHA1"
decryption="AES"
/>