Я использую пользовательское имя пользователя/пароль. И я должен создать специальный объект, который зависит от имени пользователя/пароля. Этот объект будет использоваться в дальнейшем. Валидатор выглядит так: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? Спасибо.
Но я не могу получить пароль внутри экземпляра службы WCF. Таким образом, я не могу создать объект MySession. Я сделал это последовали. Служба WCF имеет открытый статический словарь с логином/паролями. CustomValidator хранит логин/пароль в этом словаре. Служба WCF создает (в конструкторе) объект MySession с использованием словаря и OperationContext.Current.ServiceSecurityContext.PrimaryIdentity.Name (или аналогичный). Но этот путь пахнет. 1) Я заставил создать два объекта MySession - в валидаторе и в сервисе. 2) Я храню пароли в памяти - проблема с безопасностью. Плюс пароли могут быть изменены. – muradovm