В веб-API я создал атрибут TokenAuthentication
для проверки токена, который пришел от клиента, после чего пользователь должен войти в систему, а затем я использую свой UserServiceManager
для входа в систему, например это:Разное Thread.Principal в веб-атрибуте Api
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);
I Используется как Thread.CurrentPrincipal
и System.Web.HttpContext.Current.User
установить Principal из-за другой поток в Web API.
Моя цель Thread.CurrentPrincipal.Identity.Name
может использоваться в моем контроллере api. Затем я установить это в TokenAuthentication
моего Attribute после входа:
Thread.CurrentPrincipal = System.Web.HttpContext.Current.User;
он не работает и Thread.CurrentPrincipal.Identity.Name
еще пуст в апи controller.I переехал выше линии в моем действии и работал, но я не хочу напишите это в каждом из моих действий. что мне делать?
Если вы находитесь в действии, вы можете получить из свойства 'User', ex:' this.User' из 'ApiController' –
Спасибо, но у меня есть несколько служб, которые используют Thread.CurrentPrincipal.Identity.Name и i необходимо использовать это. Я должен назначить this.User Thread.CurrentPrincipal в моем действии тоже. как я сказал, я не хочу такого задания в каждом из моих действий. Мне нужно что-то в целом. –