2014-10-14 3 views
0

Я использую пользовательское имя пользователя/пароль. И я должен создать специальный объект, который зависит от имени пользователя/пароля. Этот объект будет использоваться в дальнейшем. Валидатор выглядит так:WCF - сохранить пользовательские данные после аутентификации

public class CustomUserNamePasswordValidator: UserNamePasswordValidator 
{ 
    public override void Validate(string userName, string password) 
    { 
     if (string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(password)) 
     { 
      throw new ArgumentNullException(); 
     } 

     try 
     { 
      var session = new Session(userName, password); 
     } 
     catch(Exception) 
     { 
      throw new SecurityTokenException("Unknown Username or Password"); 
     } 
    } 
} 

Сессия - мой собственный тип. Я пытаюсь предоставить веб-доступ к другому API через веб-службы. Думайте, что каждому вызову API должен быть предоставлен объект сеанса. Могу ли я сохранить объект сеанса для его использования в методах обслуживания? Этот объект должен быть дефрентен для каждого экземпляра службы (за звонок или за сеанс). Каков наилучший способ сделать это в случае использования типа Session IDisposable? Спасибо.

ответ

0

Хорошо. Если вы хотите иметь свой объект сеанса для каждого экземпляра службы WCF, вы можете создать этот объект сеанса в конструкторе службы WCF. Каждый метод будет иметь доступ к объекту сеанса через поле экземпляра, и каждый метод будет иметь доступ к имени пользователя через свойство OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name. Конечно, у методов не будет доступа к паролю.

+0

Но я не могу получить пароль внутри экземпляра службы WCF. Таким образом, я не могу создать объект MySession. Я сделал это последовали. Служба WCF имеет открытый статический словарь с логином/паролями. CustomValidator хранит логин/пароль в этом словаре. Служба WCF создает (в конструкторе) объект MySession с использованием словаря и OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name (или аналогичный). Но этот путь пахнет. 1) Я заставил создать два объекта MySession - в валидаторе и в сервисе. 2) Я храню пароли в памяти - проблема с безопасностью. Плюс пароли могут быть изменены. – muradovm