繁体   English   中英

动态声明asp.net核心身份无数据库持久性

[英]Dynamic claims asp.net core identity no DB persistence

我正在建立一个系统,在用户登录后,他可以选择代表某个组织行事。 用户会看到一个组织列表,他可以选择“模拟”哪个组织。

此信息是动态的,可以在登录之间更改,因此它不能保留在数据库中。

我发现我可以尝试向用户添加额外的声明。 我已经用它来存储一些信息。 我通过实现我自己的 UserClaimsPrincipalFactory 来实现这一点,这非常简单,因为该信息保留在用户中并且不会改变。

为了添加我的组织 ID 声明,我尝试了不同的方法,但都没有奏效。

直接在 User.Identity 中添加新声明不会在下一个请求中保留它。

添加新声明并使用 httpContext 登录也会在下一个请求中丢失。

我认为这完全是因为我的 UserClaimsPrincipalFactory。

我发现如何为会话保留它的唯一方法是使用 userManager。

await userManager.AddClaimAsync(user, new System.Security.Claims.Claim("organizationId", "myOrganization"));

但是,userManager 将数据保存在 db 中,正如我在开始时所说的,这些数据是动态的并且在登录之间发生变化,它不能持久存在于 db 中。

我在这个主题上发现了这个问题: Store data in cookie with asp.net core identity

但不幸的是,该解决方案将数据保存在数据库中。

这个问题与我的用例类似,但没有回答如何动态向用户添加声明?

我建议您使用自定义响应标头值或 cookie 来为给定会话保留此值。 看看这个问题是否有帮助: 如何添加自定义标题

在这篇文章中添加一个与会话过期时间相同的 cookie创建一个 cookie希望这些帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM