Raz*_*tru 4 c# asp.net-core asp.net-core-2.0
我们假设我们有两个API,一个用于UserManagement,一个用于Auth.
UserManagement API负责初始邀请电子邮件(我需要一个,ResetPasswordToken因为这是我目前的应用流程),Auth API并负责密码恢复(我需要的地方ResetPasswordToken).
当然,我需要为两个应用程序指定相同的机器密钥.
我们还假设这两个应用程序将部署在负载均衡器后面.2个应用程序x 3个实例.
在两个API中保持密钥(Redis等)的共享位置是否足够?
services.AddDataProtection().PersistKeysToRedis(/* */);
Run Code Online (Sandbox Code Playgroud)
我认为如果它适用于一个应用程序,多个实例场景,它将适用于多个应用程序,多个实例场景.
PS:我无法找到任何关于任何锁定机制的东西(似乎只有一个看看它的行为)
我关心的另一件事:竞争条件?!
Duc_Thuan_Nguy 2017年6月9日
出于好奇,密钥滚动如何处理并发?例如,假设我们有一个包含2台计算机和共享网络目录的Web场.可能存在竞争条件,其中两台机器同时想要滚动新密钥.这种情况如何处理?或者两台机器可以自己刷新密钥,只要它们可以访问这两个新密钥,它们就可以平滑地取消保护数据?
评论参考:https://docs.microsoft.com/en-us/aspnet/core/security/data-protection/implementation/key-management
稍后编辑:看起来如果您有多个应用程序,仅指定要在同一位置保留密钥是不够的.应用鉴别器有一个概念(所有应用程序都是隔离的).
您将需要以下内容:
services.AddDataProtection(configure => {
configure.ApplicationDiscriminator = "App.X";
}).PersistKeysToRedis(/* */);
Run Code Online (Sandbox Code Playgroud)
锁定和竞赛条件问题仍然有效.
不,这还不够.ASP.NET Core的数据保护默认根据文件路径或IIS托管信息隔离应用程序,因此多个应用程序可以共享一个密钥环,但仍然无法读取彼此的数据.
正如文档所述
默认情况下,即使数据保护共享相同的物理密钥存储库,数据保护系统也会将应用程序彼此隔离.这可以防止应用程序了解彼此的受保护有效负载.要在两个应用程序之间共享受保护的有效负载,请为每个应用程序使用具有相同值的SetApplicationName
public void ConfigureServices(IServiceCollection services)
{
services.AddDataProtection()
.SetApplicationName("shared app name");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1679 次 |
| 最近记录: |