如何在WCF中保存用户对象

时间:2010-01-19 14:05:59

标签: c# wcf wcf-security

我有一个使用自定义“UserNamePasswordValidator”的服务,需要保存经过验证的用户对象,以便稍后在服务中检索它。我怎样才能做到这一点?或者我如何在服务中稍后访问用户的凭据?

/尤

2 个答案:

答案 0 :(得分:6)

不是那么简单。问题是自定义UserNamePasswordValidator在AuthorizationPolicy.Evaluate()之间调用,介于两者之间,WCF初始化Thread.CurrentPrincipal本身。我已经尝试在密码验证器中设置它但它不起作用,在创建初始主体时由WCF立即破坏。我可以使其工作的唯一方法是等待并在AuthorizationPolicy.Evaluate()方法中设置Thread.CurrentPrincipal。

我想听一位WCF大师解释这一点,因为我看到很多WCF初学者都遇到了同样的问题,我认为这是WCF设计中的缺陷。

答案 1 :(得分:3)

简短的回答是,最正确的选择是创建一个IPrincipal实例,代表经过身份验证的用户并将其放在Thread.CurrentPrincipal上。

稍后在服务中运行在同一线程上的所有代码都将能够通过Thread.CurrentPrincipal访问经过身份验证的用户。

这是在.NET中处理经过身份验证的用户的标准方法(因此也是在WCF中)。