我在我的 WCF 服务应用程序中有一个自定义验证器,我在其中使用标准 Microsoft 身份表验证用户名和密码。
此函数从用户返回我的数据,包括用户 ID(Guid)
User user = new IdentityAuthenticator().ValidateUser(userName, password);
现在我想在 operationContext 中添加用户 ID,以便稍后在其他功能中使用用户 ID
OperationContext.Current.ServiceSecurityContext.AuthorizationContext.Properties["UserID"] = user.UserID;
但是当我这样做时,我收到错误消息“对象引用未设置为对象的实例。” 这并不奇怪,因为我没有创建它的实例。但我不知道怎么做
所以我的问题是如何从我的 Validate 函数中将 UserID 保存在 OperationContext 中,以便我可以在其他函数中重用 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.
}
}
}
}