Членство в ASP.NET / Роли / FormsAuth - как я могу войти в систему как суперпользователь?

Я работаю над веб-приложением, которое использует поставщиков членства и ролей ASP.NET 2.0 с проверкой подлинности с помощью форм. В системе есть разные роли. Мне нужна роль пользователя, которая по сути является суперпользователем, который может «входить в систему» ​​как любая учетная запись пользователя (фактически выдавая себя за пользователя).

Кто-нибудь знает, возможно ли это с помощью провайдеров? Любые идеи?

Один из подходов, о котором я думал, заключался в том, чтобы выйти из системы суперпользователя и войти в систему как желаемый пользователь с помощью

FormsAuthentication.SetAuthCookie(username, false);

И добавление переменной в их сеанс, чтобы пометить их как суперпользователя. Я думаю, это сработает, но мне просто интересно, есть ли более разумный способ сделать это без прямого использования объекта Session?


person Andrew Corkery    schedule 25.02.2009    source источник


Ответы (3)


Подход Asp.net не поддерживает эту концепцию, поэтому вы правы, пытаясь найти альтернативный способ. Вы можете добавить информацию IsSuperUser в свойство UserData билета проверки подлинности.

person eglasius    schedule 25.02.2009
comment
Спасибо, Фредди, думаю, я согласен с этим предложением. Кажется, наиболее правильным местом для этого является сохранение этой информации в билете аутентификации. - person Andrew Corkery; 26.02.2009

Почему у вас нет роли суперпользователя, которая может все? Тогда пользователь может быть лишь частью этой роли.

Если вам действительно нужна возможность администратора выдавать себя за кого-то другого, я не знаю, для чего нужен дополнительный флаг? Если он помечает текущего вошедшего в систему пользователя, наделяя его суперсилами, то же самое будет достигнуто путем настройки роли. Однако, если вам нужно просто выдать себя за кого-то другого (например, это служба поддержки, и вам нужно видеть то же, что видит конечный пользователь) - я бы просто проверил учетные данные в обычном режиме, а затем проверял, входит ли в систему суперпользователь и кто они хотят выдавать себя за другое лицо и на основе этого просто аутентифицируют пользователя, вошедшего в систему, как того, за которого он хочет выдать себя.

Надеюсь, то, что я написал, имеет смысл ...

person Pawel Krakowiak    schedule 25.02.2009
comment
Привет, Павел. Спасибо за ваш отзыв. Возможно, я не объяснил это должным образом - сайт использует персонализацию, поэтому представление для каждого пользователя разное, и это достигается с помощью HttpContext.Current.User. Мне нужно, чтобы это был зарегистрированный пользователь, но я также знаю, что он является суперпользователем. - person Andrew Corkery; 25.02.2009

Вот что бы я сделал. К сожалению, графики нет, на айпаде здесь, в постели ...

1) использовать архитектуру на основе утверждений. Его легко реализовать, смотрите мой проект.

2) по существу олицетворенный пользователь будет иметь второе удостоверение для основного объекта утверждений, но будет иметь другую область (область может быть неправильным словом, строка, которую вы используете для создания удостоверения)

3) Вы можете создать личность олицетворенного пользователя и вручную создать его утверждения .... Они должны быть немедленно записаны в токен. Для этого я бы посмотрел на общий класс преобразователя утверждений.

4) Возможно, вам придется изменить поведение сайта в зависимости от наличия вымышленной личности, но это самое интересное.

Рабочая реализация WIF https://github.com/wcpro/scaffr-generated

person rodmjay    schedule 28.03.2013