如何在 WCF 中保存用户对象
Posted
技术标签:
【中文标题】如何在 WCF 中保存用户对象【英文标题】:How to save user object in WCF 【发布时间】:2011-01-06 19:55:21 【问题描述】:我有一个使用自定义“UserNamePasswordValidator”的服务,需要保存经过验证的用户对象,以便以后在服务中检索它。我怎样才能做到这一点?或者我以后如何在服务中访问用户的凭据?
/维克托
【问题讨论】:
【参考方案1】:事情没那么简单。问题是自定义 UserNamePasswordValidator 在 AuthorizationPolicy.Evaluate() 之前被调用,并且介于两者之间,WCF 初始化 Thread.CurrentPrincipal 本身。我尝试在密码验证器中设置它,但它不起作用,它在创建初始主体时立即被 WCF 破坏。我可以让它工作的唯一方法是等待并在 AuthorizationPolicy.Evaluate() 方法中设置 Thread.CurrentPrincipal。
我想听听 WCF 专家解释这一点,因为我看到很多 WCF 初学者对此有同样的问题,我认为这是 WCF 设计中的一个缺陷。
【讨论】:
【参考方案2】:简短的回答是,最正确的选择是创建一个代表经过身份验证的用户的IPrincipal 实例并将其放在Thread.CurrentPrincipal 上。
服务中稍后在同一线程上运行的所有代码都将能够通过 Thread.CurrentPrincipal 访问经过身份验证的用户。
这是在 .NET(因此也在 WCF)中处理经过身份验证的用户的标准方式。
【讨论】:
以上是关于如何在 WCF 中保存用户对象的主要内容,如果未能解决你的问题,请参考以下文章