【发布时间】:2013-04-12 21:38:11
【问题描述】:
我正在为我的 WCF 安全性使用自定义用户名和密码验证。现在我想在请求期间存储用户名,以便稍后在调用的方法中访问它。我该怎么做?
一些示例代码来描述我的问题:
public class CustomUserValidator : UserNamePasswordValidator
{
public override void Validate(string username, string password)
{
if (username == "aaa" && password == "bbb")
{
// store username where i can get it in method called later.
return;
}
throw new SecurityTokenException("Unknown Username or Password");
}
}
现在被调用的方法:
public void WebServiceMethod()
{
Database.User.Single(c => c.Username == /* username from above */);
}
BR
安德烈亚斯
【问题讨论】:
-
最简单的方法是将其存储在静态用户名属性中。更好的方法是编写自定义 WCF 行为。
-
@daryal 在各个层面都不好; a:WCF是多线程的,b:WCF可以在不同的点使用不同的线程(使得thread-static不可靠)
-
@MarcGravell 你在每个层面上都是对的:),但是为了回答这个问题,应该提供实例模式和并发模式。这就是为什么我提议写一个行为。
-
@daryal 为什么会有这样的行为? identity 在 WCF 中有一个得到很好支持的模型
-
@MarcGravell 使用主体的用户名是可以的。但在复杂的场景中,如果您需要一些相关参数,我认为最好采用自定义行为。考虑一种情况,wcf 调用标头具有需要在数据库中持久保存的标识符字段,并且相同的参数用于关联目的。
标签: c# wcf web-services session