在 Web API 中,我创建了一个TokenAuthentication
属性来验证来自客户端的令牌,之后用户应该登录,然后我使用 myUserServiceManager
登录,如下所示:
ApplicationUser aUser = new ApplicationUser();
user.CopyToModel(aUser);
_signInManager.SignIn(aUser, true, true);
//_signInManager.UserManager.CreateIdentity(authenticationType,"")
//var l = _authenticationManager.GetExternalLoginInfo();
////l.Login.
//var authType = _authenticationManager.GetAuthenticationTypes();
//var cliamIdentity = _authenticationManager.CreateTwoFactorRememberBrowserIdentity(aUser.Id);
var claims = new List<Claim>();
claims.Add(new Claim(ClaimTypes.Name, user.UserName));
claims.Add(new Claim(ClaimTypes.Email, user.Email));
claims.Add(new Claim(ClaimTypes.NameIdentifier, user.UserName));
var identity = new ClaimsIdentity(claims, "CustomApiKeyAuth");
var principal = new ClaimsPrincipal(new[] { identity });
Thread.CurrentPrincipal = principal;
System.Web.HttpContext.Current.User = principal;
_authenticationManager.SignIn(new AuthenticationProperties { IsPersistent = true }, identity);
return UpdateResult<SignInStatus>.Success(SignInStatus.Success);
由于 web api 中的线程不同,我同时使用Thread.CurrentPrincipal
并设置了 Principal。System.Web.HttpContext.Current.User
我的目的是Thread.CurrentPrincipal.Identity.Name
可以在我的 api 控制器中使用。TokenAuthentication
然后我在登录后将其设置在我的属性中:
Thread.CurrentPrincipal = System.Web.HttpContext.Current.User;
它不起作用,并且 Thread.CurrentPrincipal.Identity.Name
在 api 控制器中仍然是空的。我在我的操作中移动了上面的行并且工作了,但我不想在我的每个操作中都写它。我应该怎么办?