我正在为一个多租户ASP.NET MVC应用程序使用OWIN身份验证。
该应用程序和身份验证位于单个服务器上的单个应用程序中,但可以通过许多域和子域访问。 例如:
www.domain.com
site1.domain.com
site2.domain.com
site3.domain.com
www.differentdomain.com
site4.differentdomain.com
site5.differentdomain.com
site6.differentdomain.com
我希望能够允许用户在任何一个域名上登录,并且无论使用哪个域名访问应用程序,他们的认证cookie都能正常工作。
以下是我的认证设置方式:
public void ConfigureAuthentication(IAppBuilder Application)
{
Application.CreatePerOwinContext<RepositoryManager>((x, y) => new RepositoryManager(new SiteDatabase(), x, y));
Application.UseCookieAuthentication(new CookieAuthenticationOptions
{
CookieName = "sso.domain.com",
CookieDomain = ".domain.com",
LoginPath = new PathString("/login"),
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
Provider = new CookieAuthenticationProvider
{
OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<UserManager, User, int>(
validateInterval: TimeSpan.FromMinutes(30),
regenerateIdentityCallback: (manager, user) => user.GenerateClaimsAsync(manager),
getUserIdCallback: (claim) => int.Parse(claim.GetUserId()))
}
});
Application.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}
我在我的应用程序的根目录下的web.config中显式设置了一个机器密钥:
<configuration>
<system.web>
<machineKey decryption="AES" decryptionKey="<Redacted>" validation="<Redacted>" validationKey="<Redacted>" />
</system.web>
</configuration>
更新
当我在domain.com和site1.domain.com之间导航时,此设置按预期工作,但现在它不允许我登录到differentdomain.com。
我知道cookies与单个域相关联。但是,跨多个域保持登录的最简单方法是什么?我是否可以从不同的域中读取cookie,对其进行解密,并为differentdomain.com重新创建一个新的cookie?