Как добавить олицетворение в MVC ASP.NET Identity 2.0

Мне интересно, как добавить олицетворение пользователя в mvc identity 2.0, я видел, как некоторые люди использовали это:

FormsAuthentication.SignOut();
FormsAuthentication.SetAuthCookie(user.UserName, false);

Это не сработает для меня, я даже не выйду из системы, я использую:

AuthenticationManager.SignOut() 

Итак, как мне это сделать? У меня есть панель администратора, в которой перечислены пользователи, я получаю идентификатор пользователя или имя пользователя, что именно мне нужно сделать? Я никогда не использовал Claims, поэтому я не очень в этом понимаю. Мне не нужно возвращаться к пользователю, которого они могут просто выйти из системы.


person Michael    schedule 05.09.2014    source источник
comment
Я сделал это раньше для одного из моих проектов. А вот и мой путь: tech.trailmax .info/2014/06/   -  person trailmax    schedule 08.09.2014


Ответы (2)


Вот решение для тех, у кого еще есть эта проблема:

var user = _db.AspNetUsers.Single(a => a.Id == id);

var impersonatedUser = UserManager.FindByName(user.Email);

var impersonatedIdentity = UserManager.CreateIdentity(impersonatedUser, DefaultAuthenticationTypes.ApplicationCookie);

AuthenticationManager.SignOut(DefaultAuthenticationTypes.ApplicationCookie);
AuthenticationManager.SignIn(new AuthenticationProperties { IsPersistent = false }, impersonatedIdentity);
person Michael    schedule 05.09.2014

Спасибо за этот вопрос, так как он помог мне найти ряд решений, включая ваше и @trailmax. После некоторого размышления я пошел другим путем, так как мне просто нужно было изменить некоторые претензии, чтобы выполнить олицетворение. Я называю это полуимперсонацией, так как это просто меняет несколько вещей, а не полностью меняет пользователя.

Как и в случае с trailmax, я написал запись в на моем подход со всем кодом. Ниже я описал, как это работает.

  1. Я добавляю файл cookie сеанса с информация о олицетворении, которую мне нужно было изменить в текущем пользователе, чтобы позволить ему получить доступ к информации, принадлежащей другому пользователю. В моем случае у меня был ключ к некоторым данным.

  2. Затем я использую новый MVC 5 AuthenticationFilter. OnAuthentication для а) поиска файла cookie олицетворения. Если он найдет его, то изменит утверждения в текущем ClaimsPrincipal, которые фильтр затем распространит по приложению.

  3. Выход из режима олицетворения был достигнут путем удаления файла cookie, что вы делаете, устанавливая дату истечения срока действия до даты, предшествующей текущему моменту.

Преимущества заключаются в гораздо большем контроле над уровнем доступа, но это не будет работать во всех случаях. В моей статье я сравниваю свои подход с подходом @trailmax, чтобы выявить преимущества каждой реализации.

person Jon P Smith    schedule 19.06.2015