WCF Установить идентификатор пользователя в OperationContext
У меня есть собственный валидатор в моем приложении-службе WCF, где я проверяю имя пользователя и пароль с помощью стандартных таблиц идентификации Microsoft.
Эта функция возвращает мне данные от пользователя, включая UserID (Guid)
User user = new IdentityAuthenticator().ValidateUser(userName, password);
Теперь я хочу добавить UserID в operationContext, чтобы я мог использовать UserID позже в других функциях
OperationContext.Current.ServiceSecurityContext.AuthorizationContext.Properties["UserID"] = user.UserID;
но когда я это делаю, я получаю сообщение об ошибке "Ссылка на объект не установлена на экземпляр объекта". что не удивительно, потому что я не создал его экземпляр. но я не знаю как
Поэтому мой вопрос заключается в том, как сохранить идентификатор пользователя в OperationContext из функции проверки, чтобы я мог повторно использовать идентификатор пользователя в других функциях.
namespace Facilicom.SOA.Service.FSE.Implementation.Authentication
{
public class IdentityValidator : UserNamePasswordValidator
{
public override void Validate(string userName, string password)
{
Debug.WriteLine("Check user name");
User user = new IdentityAuthenticator().ValidateUser(userName, password);
if (user != null)
OperationContext.Current.ServiceSecurityContext.AuthorizationContext.Properties["UserID"] = user.UserID;
else
{
var msg = String.Format("You are not authorized");
Trace.TraceWarning(msg);
throw new FaultException(msg);//the client actually will receive MessageSecurityException. But if I throw MessageSecurityException, the runtime will give FaultException to client without clear message.
}
}
}
}