【问题标题】:share authentication cookie between .Net Core Web Apps在 .Net Core Web Apps 之间共享身份验证 cookie
【发布时间】:2021-07-29 22:35:30
【问题描述】:

我想在 App1 中进行身份验证,然后单击指向 App2 的链接,而不必进行身份验证。我想出了一个非常常见的场景。 this doc 说它非常容易实现。所以我逐字创建了一个身份验证应用程序here

我按照文档中的建议应用了额外的 2 行代码

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

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

然后我将它部署到我的本地 IIS 服务器(https://localhost/App1),它运行良好。

对于 App2,我应用了与上面相同的两行代码并将其部署到我的本地 IIS 服务器(https://localhost/App2)。对 App1 进行身份验证然后单击 App2 的链接后,我收到错误消息“未指定身份验证方案,并且未找到 DefaultChallengeScheme”。我认为这必须在 App2 中遗漏一些东西,但文档只包含这两行代码。无论如何,我尝试添加以下每个(不是同时)4 个选项来让它开心,但没有任何效果。

    services.AddAuthentication("Identity.Application");

    services.AddAuthentication();//fails asking for default schema and challenge

    services.AddDefaultIdentity<IdentityUser>().AddEntityFrameworkStores<SharedAuthContext>();//fails

    services.AddAuthentication(options =>
    {
        options.DefaultScheme = CookieAuthenticationDefaults.AuthenticationScheme;
        options.DefaultChallengeScheme = CookieAuthenticationDefaults.AuthenticationScheme;
    });

App2 中显然缺少某些东西,但我无法弄清楚?

【问题讨论】:

    标签: asp.net .net authentication cookies


    【解决方案1】:

    CookieAuthenticationDefaults.AuthenticationSchemea constant string with value "Cookies"

    身份框架使用different names for its cookies

    • IdentityConstants.ApplicationScheme -> "Identity.Application"
    • IdentityConstants.ExternalScheme -> "Identity.External"(我们对此不感兴趣)

    所以你应该把名字改成

    services.AddAuthentication(options => {
        options.DefaultScheme = "Identity.Application";
        options.DefaultChallengeScheme = "Identity.Application";
    }).AddCookie("Identity.Application", options => { ... });
    

    另请参阅有关在应用程序之间共享 cookie 的 Microsoft 文档。

    https://docs.microsoft.com/en-us/aspnet/core/security/cookie-sharing?view=aspnetcore-5.0

    【讨论】:

    • 谢谢,但我仍然得到相同的“没有指定身份验证方案,并且没有找到 DefaultChallengeScheme”使用该配置。
    • 您有正确名称的 cookie 身份验证方案吗? services.AddAuthentication(...).AddCookie("Identity.Application", ...)
    • 见这个:docs.microsoft.com/en-us/aspnet/core/security/data-protection/…“默认情况下,数据保护系统会根据应用的内容根路径将应用彼此隔离,即使它们共享同一个物理密钥存储库。这会阻止应用了解彼此的受保护负载。”
    猜你喜欢
    • 2020-05-18
    • 2019-08-17
    • 2018-03-09
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 2019-07-05
    • 2020-03-09
    • 1970-01-01
    相关资源
    最近更新 更多