ASP.NET 标识 2 - 在 foo.com 登录和注销 username.foo.com 注销时注销不起作用



我正在开发一个多租户Web应用程序,主要使用.NET Framework 4.6(MVC和 ASP.NET Identity 2.0)。这是我的实现:

用户访问 foo.com 登录。我在 Startup.Auth.cs foo.com 中使用以下代码:

var cookieOptions = new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/account/login"),
CookieDomain = ".foo.com"
};
app.UseCookieAuthentication(cookieOptions);

两个应用程序(foo.com 和 username.foo.com)上的机器密钥完全相同,这是我的示例机器密钥:

<machineKey validationKey="xx" decryptionKey="xx" validation="SHA1" decryption="AES" />

要登录,我使用以下代码:

signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);

我的另一个应用程序 username.abc.com 是多租户,即用户名可以是任何东西。我在 Startup.Auth.cs 中使用 username.abc.com 以下代码:

var cookieOptions = new CookieAuthenticationOptions
{
ReturnUrlParameter = "redirectto",
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/account/login")
};
app.UseCookieAuthentication(cookieOptions);

请注意,我没有使用 cookie 域,因为它可以是任何东西,或者用户已经开始使用自己的域(让我们考虑用户仍在使用 foo.com 子域)。

使用此代码,用户成功登录并重定向到他的 username.foo.com,但是一旦他单击 username.foo.com 上的注销,页面就会重新加载,没有任何反应。这是我在注销操作中使用的内容:

authenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
//authenticationManager.SignOut();

我们还有另一种选择可以从 username.foo.com 登录和注销,因此当用户直接从 username.foo.com 登录时,他可以成功注销。仅当用户从 foo.com 登录时出现问题。

从基础结构的角度来看,foo.com 不是负载平衡的,而是 username.foo.com 通过负载均衡器运行(在生产环境中)。但我认为这不会成为问题,因为我在具有相同问题的单个暂存环境中运行这两个应用程序。

我也尝试了自定义 CookieAuthenticationProvider 实现,但它也有类似的问题。

请帮忙。

您无法从username.foo.com更改 cookie.foo.com。它在RFC2109中。

4.3.2 拒绝饼干

  • 来自 Domain=.foo 的请求主机 y.x.foo.com 的 Set-Cookie.com 将被拒绝,因为 H 是 y.x 并且包含一个点。

您必须更改工作流程。 您可以将用户重定向到redirect_urlfoo.com以便注销,成功注销后将用户重定向到username.foo.com中的redirect_url

相关内容

  • 没有找到相关文章

最新更新