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

Dynamic claims asp.net core identity no DB persistence

我正在设置一个系统,用户登录后可以选择代表某个组织行事。用户会看到一个组织列表,他可以选择'impersonate'。

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

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

为了添加我的 organizationId 声明,我尝试了不同的方法并且 none 成功了。

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

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

我想这都是因为我的 UserClaimsPrincipalFactory。

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

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

但是,userManager 将数据保存在数据库中,正如我在开始时所说的那样,此数据是动态的,并且会在登录之间发生变化,它不能保留在数据库中。

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

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

这个问题与我的用例类似,但没有人回答How to add claim to user dynamically?

我建议您使用自定义响应 header 值或 cookie 来为给定 session 保留此值。 看看这个问题是否有帮助:How to add a custom header

添加与 session 过期时间相同的 cookie,如 post:Create a cookie 希望这些帮助。