Пользовательский IPrincipal вместе с WindowsAuthentication - PullRequest
5 голосов
/ 13 марта 2009

Есть ли хороший способ объединить аутентификацию ASP.NET Windows с пользовательским объектом IPrincipal / IIdentity? Мне нужно сохранить адрес электронной почты пользователя, и я сделал это для проверки подлинности с помощью пользовательской пары IIdentity / IPrincipal, которую я добавил в Context.CurrentUser во время события AuthenticateRequest.

Как мне лучше всего это сделать, используя WindowsAuthentication?

Ответы [ 2 ]

3 голосов
/ 27 марта 2009

В итоге я реорганизовал свое первоначальное решение, чтобы заменить Принципала вместо Идентичности, как я первоначально думал. Замена удостоверения оказалась проблематичной, поскольку я столкнулся с проблемами безопасности при создании экземпляра нового расширенного WindowsPrincipal.

public class ExtendedWindowsPrincipal : WindowsPrincipal
{
    private readonly string _email;

    public ExtendedWindowsPrincipal(WindowsIdentity ntIdentity, 
       string email) : base(ntIdentity)
    {
            _email = email;
    }

    public string Email
    {
        get { return _email; }
    }
}

В моем модуле аутентификации я заменил принципал на HttpContext следующим образом:

var currentUser = (WindowsIdentity)HttpContext.Current.User.Identity;
HttpContext.Current.User = 
    new ExtendedWindowsPrincipal(currentUser, userEmail);
3 голосов
/ 13 марта 2009

Может быть, вы могли бы создать свой ExtendedWindowsPrincipal как производный класс на основе WindowsPrincipal и просто добавить дополнительные данные в производный класс?

Таким образом, ваш ExtendedWindowsPrincipal все равно будет распознаваться везде, где требуется WindowsPricinpal.

ИЛИ: поскольку вы говорите об использовании аутентификации Windows, вы, вероятно, находитесь в сети Windows - есть ли где-нибудь Active Directory или база данных пользователей, где вы можете найти интересующий вас адрес электронной почты в вместо того, чтобы хранить его в основной?

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...