gpt4 book ai didi

azure - 在应用程序之间共享 ASP.NET Core 数据保护,而不破坏现有的 cookie 和 token

转载 作者:行者123 更新时间:2023-12-02 23:55:56 26 4
gpt4 key购买 nike

我们正在使用ASP.NET Core Data Protection与 ASP.NET Core Web 应用程序中的 ASP.NET Identity 和 Cookie 身份验证结合使用。我们还使用 ASP.NET Core Identity 发送重置密码链接,该身份使用数据保护 key 。我们使用 Entity Framework 将数据保护 key 保存在数据库中。通过将 key 存储在数据库中,我们在 Azure 中交换部署槽时不会出现任何问题。

services
.AddDataProtection()
.PersistKeysToDbContext<KeysContext>();

这一切都按预期进行,我们已经在生产中运行了几年。

我们现在有一项新功能,用户可以延迟向新用户发送邀请链接。这些生成的邀请链接使用 ASP.NET Identity 中的 ResetPassword token 提供程序。为此,我们使用 Azure 函数,稍后会在 Azure 函数中生成并发送邀请链接。

var token = await this.userManager.GeneratePasswordResetTokenAsync(user);

现在的问题是,Azure Function 需要使用与 Web 应用程序相同的数据保护 key ,因为生成的 ResetPassword token 稍后会在 Web 应用程序中“使用”和验证。这可以使用 ApplicationDescriminator 来完成配置数据保护时。每个应用程序(即我们的 Web 应用程序和 Azure 函数)都需要使用相同的 ApplicationDecriminator:

services
.AddDataProtection(o => o.ApplicationDiscriminator = "Our-Application-Name")
.PersistKeysToDbContext<KeysContext>();

但是,当我们现在将现有且正在运行的 Web 应用程序中的 ApplicationDecriminator 最初设置为 “Our-Application-Name” 时,我们所有已发送的 token (邀请、重置密码、更改电子邮件等)将变得无效,我们的 ASP.NET Core Identity Cookie 也将变得无效,所有用户都将被注销。

是否有任何方法可以告诉 Azure Function 使用与 Web 应用程序相同的数据保护 key 而不更改或破坏 Web 应用程序中的现有 token

最佳答案

我们找到了一个非常巧妙的解决方案,可以不破坏 Web 应用程序中的现有 token 和 Cookie:我们没有在 Web 应用程序和 Azure 函数中显式指定 ApplicationDiscriminator,而是指定 >ApplicationDecriminator 在 Azure Function 中,并将其设置为“D:\home\site\wwwroot”

未指定任何值时,此值是 Web 应用程序中的默认值,因为 ASP.NET Core 数据保护中的默认实现使用 HostingApplicationDiscriminator它使用 IHostEnvironment.ContentRootPath 属性。对于 Azure 部署,此 ContentRootPath 默认设置为 “D:\home\site\wwwroot”

我们对这种方法不太满意,因为这看起来像是一种黑客攻击,但它仍然比通过显式指定 ApplicationDecriminator 破坏所有 token 和 cookie 更好。

关于azure - 在应用程序之间共享 ASP.NET Core 数据保护,而不破坏现有的 cookie 和 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71826678/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com