如何在同一域的另一个项目中使用 MVC .NET Core 身份验证 cookie

How to use an MVC .NET Core authentication cookie in another project on the same domain

我们公司有一台运行IIS的服务器,我们通过网络内的IP地址访问它。根文件夹中有多个项目。这些都是 MVC ASP .NET CORE 2 网络应用程序。

其中一个项目是一种与其他项目有 link 的中心 Web 应用程序。我需要做的是:

  1. 用户在使用 Microsoft.AspNetCore.Identity 和 Microsoft.AspNetCore.Authorization 的中心 Web 应用程序登录。
  2. 用户点击 link 将他带到另一个应用程序。 (显然,它一直工作到现在。)
  3. 此应用的控制器已锁定在 [Authorize] 标签下。我希望这个应用程序识别用户已经登录并使用授权 cookie 在整个应用程序中授权他们。

当用户访问第二个应用程序时,cookie 仍然存在,但我不知道如何使用 Hub 应用程序中的 cookie。我想我需要有带有身份 SQL 数据库的 DBContext,并以某种方式使用 cookie 进行身份验证。

经过多年 PHP 我是 .NET Core 的新手,现在我真的很绝望。

感谢至少阅读本文的任何人。干杯!

如果您希望 sites/apps 都使用相同的身份验证机制,那么您可以为这两个应用程序设置一个通用的机器密钥。然后第二个应用会自动从第一个应用中获取授权用户。

设置机器密钥的方法如下:

public void ConfigureServices(IServiceCollection services)
{
     services.AddDataProtection().DisableAutomaticKeyGeneration();
}

从这里选取的示例代码:

更多详情:

更新:

以下是根据您的身份验证机制设置机器密钥和其他内容的方法:

services.AddDataProtection()
    .PersistKeysToFileSystem("{PATH TO COMMON KEY RING FOLDER}")
    .SetApplicationName("SharedCookieApp");

services.ConfigureApplicationCookie(options => {
    options.Cookie.Name = ".AspNet.SharedCookie";
    options.Cookie.Path = "/";
});

在此处阅读更多内容:https://docs.microsoft.com/en-us/aspnet/core/security/cookie-sharing?view=aspnetcore-3.0