我正在为我的 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,用户名通过 evaluation-context 参数提供给 auth-policy。 WCF 中自定义主体的一般演练是 here ,但是您可能需要在 Evaluate
中进行一些试验,以在评估上下文中找到传入的用户名。特别是,如果任何键是“声明”字典,请查看它。并查看评估上下文中的 .Claims
- 您应该在由 CustomUserValidator
发布的声明中找到包含用户名的“声明”。
但是,我已经完全完成了您在之前工作中描述的内容 - IIRC 工作正常,使用上述页面作为我的起点。
一旦您签发了委托(delegate)人,它就可以像往常一样通过以下方式获得:
string cn = Thread.CurrentPrincipal.Identity.Name;
关于c# - 在 WCF 请求中存储数据的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10315005/