gpt4 book ai didi

asp.net - 临时向登录身份用户添加声明

转载 作者:行者123 更新时间:2023-12-05 06:39:16 27 4
gpt4 key购买 nike

我想在我的 asp.net core 应用程序中“模拟”用户 - 作为支持人员的一项功能,以便他们可以有效地作为用户登录以解决问题。

在 .net core 之前,在 asp.net MVC5 中,我们是这样工作的:

var impersonatedUser = await _userManager.FindByIdAsync(id);

var impersonatedIdentity = await _userManager.CreateIdentityAsync(impersonatedUser, DefaultAuthenticationTypes.ApplicationCookie);
//add the claims to allow us back to the current user and to flag that we're impersonating:
impersonatedIdentity.AddClaim(new Claim(ClaimTypes.UserImpersonationKey, bool.TrueString));
impersonatedIdentity.AddClaim(new Claim(ClaimTypes.OriginalUserIdKey, _currentUser.User.Id.ToString()));

//log in the impersonated user:
var authenticationManager = HttpContext.GetOwinContext().Authentication;
//log us out:
authenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
authenticationManager.SignIn(new AuthenticationProperties() { IsPersistent = true }, impersonatedIdentity);

这会很好地为我们想要模拟的用户创建一个身份,添加一些声明来告诉我们正在模拟的应用程序,然后以该用户的身份登录。声明将添加到 cookie 中,使其全部持久化。

我现在正尝试在 ASP.NET Core 中执行此操作,但运气不佳。如何获取用户,以该用户身份登录,然后为该用户添加一些声明。

我知道有一些方法可以在用户登录时向其添加声明,例如提供自定义 UserClaimsPrincipalFactory 作为 described here - 但这会向所有用户添加声明,而我只想在输入模拟时向用户添加声明。

到目前为止我的代码:

var user = await _userManager.FindByIdAsync(id.ToString());

await _signInManager.SignOutAsync();
await _signInManager.SignInAsync(user, true, "Cookies");

// Now if I could just add some claims to the user to flag we're in impersonation mode....

最佳答案

都在UserClaimsPrincipalFactory里面.

这是一些代码:

 var principal = await _claimsPrincipalFactory.CreateAsync(user);

// Now add some claims to that
((ClaimsIdentity)principal.Identity).AddClaim(new Claim("Some Key", "Some value"));

// In my case, I want to sign out the current user and use this new principal with "extra" claims
await _signInManager.SignOutAsync();
await HttpContext.SignInAsync(Authentication.CookieScheme, principal, new Microsoft.AspNetCore.Authentication.AuthenticationProperties
{
IsPersistent = false
});

我的工厂被注入(inject)到我的 Controller 中:

IUserClaimsPrincipalFactory<User> claimsPrincipalFactory

关于asp.net - 临时向登录身份用户添加声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44789027/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com