Предпочитаемый способ сохранения маркера сеанса на сервере с RIA Services? - PullRequest
2 голосов
/ 13 августа 2011

Я использую AuthenticationService, полученную из AuthenticationBase, в стандартном шаблоне бизнес-приложения для RIA Services и использую проверку подлинности с помощью форм. У меня есть собственный CustomPrincipal, созданный моей инфраструктурой безопасности, который я назначаю Thread.CurrentPrincipal, чтобы он мог использоваться другими вызовами службы:


protected override bool ValidateUser(string userName, string password)
{
    try
    {
        using (LoginService service = new LoginService())
        {
            SessionInfo info = service.Login(userName, password);
            Thread.CurrentPrincipal = info.User;
            SessionCache.Instance.Save(info);
        }
     }
     catch (Exception e)
     {
        return false;
     }   
}

Однако я обнаружил, что при вызове других (неаутентификационных) RIA-сервисов Thread.CurrentPrincipal сбрасывается в объект GenericPrincipal, поэтому при инициализации других сервисов я переопределяю метод Initialize () доменный сервис и установите Thread.CurrentPrincipal, просмотрев логин в кэше сеанса:


public override void Initialize(DomainServiceContext context)
{
    base.Initialize(context);
    if (context.User.Identity.IsAuthenticated)
    {
        SessionInfo info = SessionCache.Instance.FindByUsername(context.User.Identity.Name);
        Thread.CurrentPrincipal = info.User;
    }
}

Сейчас этот поиск выполняется по имени пользователя, потому что он легко доступен в GenericPrincipal, но я бы предпочел, чтобы я мог выполнить поиск через токен сеанса. Существует ли способ с помощью служб RIA для простого сохранения маркера сеанса на сервере в течение всего сеанса? Я знаю, что мог бы сохранить этот токен сеанса в файле cookie в браузере, чтобы сохранить его, но, похоже, должен существовать более простой способ сохранения токена сеанса в течение всего срока его существования. Возможно, метод cookie - лучший способ сделать это, но я просто хотел подтвердить.

...