在 WCF 请求中存储数据的位置
本文关键字:数据 位置 存储 WCF 请求 | 更新日期: 2023-09-27 18:32:23
我正在使用自定义用户名和密码验证来确保我的 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安德烈亚斯
您通常通过发出自定义"主体"来执行此操作,该"主体"通过 IAuthorizationPolicy
完成;IIRC,用户名通过评估上下文参数提供给身份验证策略。此处提供了 WCF 中自定义主体的一般演练,但可能需要在Evaluate
中进行一些试验,以便在评估上下文中查找传入的用户名。特别是,如果任何键是"声明"字典,请查看它。并查看评估上下文中的.Claims
- 您应该在他们的发布者中找到带有用户名的"声明"CustomUserValidator
。
但是,我已经完全按照您在以前的工作中描述的内容完成了 - IIRC使用上面的页面作为我的起点,它工作得很好。
一旦您发出了本金,它将像往常一样通过以下方式提供:
string cn = Thread.CurrentPrincipal.Identity.Name;
若要通过单个 WCF 请求存储任何类型的数据,Darin Dimitrov 建议将一个简单的 IExtension<>
帮助程序类连接到当前OperationContext
: 在哪里存储当前 WCF 调用的数据?