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.
        }
       }
    } 
}

0 ответов

Другие вопросы по тегам