型 我还发现(并使用!)github thanks to a github user named CL0SeY的AWS S3存储选项。 更新:Amazon发布了他们自己的实现,用于使用AWS SSM参数存储。Github repo here。用于测试 默认情况下,令牌的生命周期为90天。这可以在添加服务时设置。因此,获得测试的简单解决方案的一种方法是生成具有长生命周期的文件系统密钥,然后将该令牌部署到服务器上的已知位置。然后从该位置设置数据保护,但告诉它永远不要生成新密钥:
//generate a test key with this in a test app or whatever:
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"c:\temp\"))
.SetDefaultKeyLifetime(TimeSpan.MaxValue);
// then use that key in your app:
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"\some\allowed\directory"))
.DisableAutomaticKeyGeneration();
2条答案
按热度按时间3ks5zfa01#
因此,当您调用
services.addMvc()
时,会自动添加防伪支持。您可以通过调用services.AddAntiforgery(opts => "your options")
更改基本配置。在引擎盖下,令牌由ASP.Net Core Data Protection library(github repo here)保护。默认情况下,我认为这是在内存中,因此生成的密钥,然后用于令牌保护,不会在多个/云服务器场景中共享。
解决方案
因此,要共享防伪令牌,您可以使用共享位置设置数据保护服务。数据保护库附带的默认值为:
字符串
然后,有几个默认值可以更好地共享存储:
型
我还发现(并使用!)github thanks to a github user named CL0SeY的AWS S3存储选项。
更新:Amazon发布了他们自己的实现,用于使用AWS SSM参数存储。Github repo here。用于测试
默认情况下,令牌的生命周期为90天。这可以在添加服务时设置。因此,获得测试的简单解决方案的一种方法是生成具有长生命周期的文件系统密钥,然后将该令牌部署到服务器上的已知位置。然后从该位置设置数据保护,但告诉它永远不要生成新密钥:
型
Linux上
所有这些都应该在Linux上运行,唯一的警告是你不应该引用windows驱动器或位置(duh).我不是100%确定如果你尝试注册表选项会发生什么.
qjp7pelc2#
对于任何使用ASP.NET Core的人来说,当使用负载均衡器时,Antiforgery在AWS上是有问题的。Antiforgery作为一个单独的示例在没有任何配置的情况下工作得很好。除了将密钥持久化到文件系统之外,我还必须将目标组设置为使用带有服务器生成的cookie的粘性会话。另一种可能性是使用Entity Core DbContext,它将允许多个应用程序共享一个密钥。