如何在 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 中保存用户对象的主要内容,如果未能解决你的问题,请参考以下文章

WCF 自定义验证器:如何从自定义验证器初始化“用户”对象

如何使用 WCF 数据服务公开非持久属性?

如何在 WCF 中序列化对象类型?

如何在模型中保存 cakephp 对象

如何通过 WCF 使用 LinqToSql 维护子对象?

如何防止 wcf 在响应中添加转义字符?