我正在设计一个系统,管理员可以以用户身份登录以代表他们解决问题等。我希望他们在此期间扮演额外的角色。有没有办法在内存中添加角色,或者在他们注销/关闭浏览器时结束。我可以从管理屏幕添加角色并在该用户再次登录时删除,但它很容易出错。干杯。
这与如何进行模拟无关。我已经让这部分工作了。我希望能够向用户添加其他角色,但仅在模拟用户时(因此有一些额外的诊断屏幕可用)。我认为下面的人正在回答我的问题,解释说当我添加声明时,我正在将其添加到 cookie 中。我正在考虑将此信息保留回数据库。我明天会尝试该代码,但我怀疑这是我需要进入的方向。这是一个愚蠢的问题,但最近规则是否发生了变化,我注意到今晚人们有点热衷于纠正语法等。
ASP.NET Core2.0 Identity使用基于声明的身份验证。 每个角色都是一个声明。 声明通过多种方式为会话保留,但通常在登录时发出的应用程序 cookie 或 JWT 身份验证令牌(不在内存中)中。
使用 SignInManager 创建用户主体并添加额外的声明应该非常简单:
// create the user principal
var principal = await signInManager.CreateUserPrincipalAsync(user);
// add the extra role
principal.Identities.First().AddClaim(new Claim(ClaimTypes.Role, SomeRole));
// issue the application cookie
await HttpContext.SignInAsync(principal)