如何在WCF中保存用户对象

6 c# wcf wcf-security

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

/维克托

cod*_*eim 6

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

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


Mar*_*ann 3

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

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

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