【问题标题】:How to use an MVC .NET Core authentication cookie in another project on the same domain如何在同一域的另一个项目中使用 MVC .NET Core 身份验证 cookie
【发布时间】:2019-11-26 21:08:42
【问题描述】:

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

其中一个项目是一种中心网络应用程序,其中包含指向其他项目的链接。我需要做的是:

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

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

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

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

【问题讨论】:

    标签: c# asp.net-mvc asp.net-core cookies asp.net-identity


    【解决方案1】:

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

    以下是设置机器密钥的方法:

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

    从这里挑选的示例代码:https://stackoverflow.com/a/46894509/218408

    更多详情:Machine key in asp.net core 2.0?

    更新:

    以下是如何根据您的身份验证机制设置机器密钥和其他:

    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

    【讨论】:

    • Machine Key 听起来很像,但是我应该在 Startup.cs 文件中添加什么?我有: services.AddIdentity(options => { options.Password.RequiredLength = 5; options.Password.RequireNonAlphanumeric = false; }).AddEntityFrameworkStores();和 app.UseAuthentication();我应该只使用 app.UseAuthentication(); 吗?
    • @JakubŽídek 我已经用更多示例代码更新了答案。请查看 Microsoft 文档以获取更多信息。
    • 根据您的更新:我是否应该将您的更新中的代码放入 Hub 应用程序的 Startup.cs 和“DisableAutomaticKeyGeneration”到我的第二个应用程序中?
    • 我更新前后的代码应该进入Startup类的ConfigureServices函数。两个应用程序应具有相同的代码集。否则他们最终会得到不同的键。
    • 非常感谢。一旦我们和我的同事一起测试它,我就会将它标记为已解决。
    猜你喜欢
    • 2018-03-10
    • 2020-01-26
    • 1970-01-01
    • 2017-12-31
    • 2020-03-09
    • 2018-02-03
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    相关资源
    最近更新 更多