【发布时间】:2019-07-12 10:45:41
【问题描述】:
我有两个在 Azure 上运行免费层服务计划的 WebApp。有一种情况,我从 WebApp A 生成身份重置密码令牌并在 WebApp B 中使用它。
在我的 Startup.cs 中,我在 ConfigureServices 方法中有如下 DataProtection 设置:
services.AddDataProtection().SetApplicationName("appname");
它在本地运行良好,但是当我尝试在这种情况下重置密码时,我在 Azure 上收到 Invalid Token 错误消息。
我正在运行带有 Identity Core 的 ASP.NET Core 2.1。此 DataProtection 设置是否有任何 Azure 限制或与免费层服务计划有关?
谢谢!
【问题讨论】:
-
我认为 Azure 免费层应该拥有对数据保护 API 的完全访问权限。查看 Microsoft documentation,似乎有一些非常明确的说明可以确保您在应用程序中使用完全相同的数据保护 API 堆栈。所以,我不得不问...我们是否 100% 确定 WebApp A 和 WebApp B 都使用相同的数据保护 API?
-
@TroyWitthoeft ,两者的配置与我之前发布的代码完全相同,并且两个项目都具有版本 2.1.1 的 Microsoft.AspNetCore.DataProtection 程序集。还有什么需要配置的吗?
-
@Markissimo 您在使用 IdentityServer 吗?然后,您可以使用授权代理令牌委托从 API A 用于 API B。如果您使用简单的 oauth 实现,那么两个服务器包含不同的 IS 数据库实例(或内存中)并且不知道彼此的令牌跨度>
-
@Markissimo 您是如何配置数据保护的?默认设置为suitable for a single machine only。除非它们在 same 机器上运行,否则您将无法跨 Web 应用使用令牌。原因是数据保护服务默认使用机器的加密密钥进行加密
-
@Markissimo 这也不特定于 Azure。在任何 ASP.NET Web 场中都会出现同样的问题。这就是为什么the machine key has to be configured on all servers in a farm
标签: c# asp.net azure asp.net-core .net-core