WCF在OperationContext中设置UserID

时间:2017-08-07 09:58:05

标签: c# wcf service operationcontext

我的WCF服务应用程序中有一个自定义验证器,我用标准的Microsoft身份表验证用户名和密码。

此函数返回用户的数据,包括UserID(Guid)

 User user = new IdentityAuthenticator().ValidateUser(userName, password);

现在我想在operationContext中添加UserID,以便我可以稍后在其他函数中使用UserID

OperationContext.Current.ServiceSecurityContext.AuthorizationContext.Properties["UserID"] = user.UserID;

但是当我这样做时,我收到错误消息“对象引用未设置为对象的实例”。什么并不奇怪,因为我没有创建它的实例。但我不知道如何

所以我的问题是如何从Validate函数中保存OperationContext中的UserID,以便我可以在其他函数中重用userID。

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 个答案:

没有答案