我正在设置一个系统,在用户登录后,他可以选择代表某个组织行事。向用户呈现一个组织列表,他选择要"假冒"的一个。
此信息是动态的,并且可以在登录之间发生变化,因此它不能持续到数据库中。
我发现我可以尝试向用户添加其他索赔。我已经用它来存储一些信息。我通过实现自己的USERCLIAMSPRICPALFACTORY来实现这一目标,并且它非常简单,因为这些信息在用户中持续存在,并且不会改变。
为了添加我的组织ID主张,我尝试了不同的方法,而无效。
直接在用户中添加新索赔。Identities不在下一个请求中坚持下去。
在下一个请求中也丢失了新的索赔并与httpcontext签名。
我认为这全是因为我的userclaimsprincipalfactory。
我找到如何使用UserManager的唯一方法。
await userManager.AddClaimAsync(user, new System.Security.Claims.Claim("organizationId", "myOrganization"));
但是,usermanager将数据保存在数据库中,正如我一开始所说的,此数据是动态的,并且登录之间的变化,它一定不能持续到DB中。
我找到了这个问题:使用ASP.NET Core Identity
将数据存储在cookie中但不幸的是,解决方案将数据保存在数据库中。
这个问题类似于我的用例,但未被解答如何动态地向用户添加索赔?
我建议您使用自定义响应标头值或cookie在给定的会话中坚持此值。查看此问题是否有帮助:如何添加自定义标题
添加与会话到期相同到期的cookie与本文相同的到期:创建cookie希望这些帮助。