在多个 Web 应用程序上使用 ASP.Net 身份

Using ASP.Net Identity on multiple web applications

我有几个应用程序托管在同一个 IIS(不同的上下文根)上,它们都使用 Microsoft.ASPNet.Identity 2.1 NuGet 包进行保护。但是目前,当我登录其中一个应用程序时,下次访问任何其他应用程序时都会提示我再次登录。我一次只能登录一个应用程序。

我猜他们都使用相同的 cookie 来存储登录令牌,所以当您登录一个应用程序时,它会重置 cookie,这对其他应用程序的请求变得无效。

我有哪些解决方案?我不介意必须单独登录每个应用程序,那么是否可以将每个应用程序配置为使用不同的 cookie?

或者,每个应用程序实际上在数据库中共享同一个用户 table,因此可以对其进行配置,以便当您登录其中一个应用程序时,其他应用程序也会登录英寸

我认为单点登录可能是您的解决方案。在 Google 上搜索它。

对于您的启动,您可以参考下面的几个链接:

Single Sign-On Asp.Net

Claim base Single Sign-on for Web and Azure

Single Sign-on for existing MVC App

希望这就是您正在寻找的并且能够解决您的问题。

是的,这是因为您在 'localhost' 上共享同一个 cookie。 这不会在生产环境中发生,因为 cookie 只是域。 (当然,除非所有应用程序都部署到同一个域)。

这在本地主机上有点烦人,但很容易解决。只需更改每个应用程序的 cookie 名称即可。

这因身份版本而异,但您正在寻找的是这样的东西:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    CookieName = "MyApp1", // <-- add this, with different names for each app
    // ...
});

通常在 Startup.Auth.csStartup.cs 文件中找到。

由于在所有应用程序上使用相同的 cookie(如果它们共享 subdomain.domain),您需要获取 MachineKey(验证密钥和解密密钥)AND 相同的 cookie 名称您所有的应用程序。

web.config 上的类似内容:

<machineKey 
  validationKey="..." <-- some valid validation key 
  decryptionKey="..." <-- some valid decryption key
  validation="SHA1"
  decryption="AES"/>

每个应用有不同的 cookie 名称:

app.UseCookieAuthentication(new CookieAuthenticationOptions
{
    CookieName = "CookieNameHere",
});

如本页所示http://tech.trailmax.info/2014/07/rename-authentication-cookie-name-of-asp-net-identity/