3

我正在为我的 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 */);
}

安德烈亚斯
_

4

2 回答 2

3

您通常会通过发出自定义“主体”来执行此操作,该“主体”通过IAuthorizationPolicy;完成。IIRC,用户名通过评估上下文参数提供给 auth-policy。此处是 WCF 中自定义主体的一般演练,但是您可能需要进行一些试验才能在评估上下文中找到传入的用户名。特别是,如果任何键是“声明”字典,请查看它。并查看评估上下文 - 您应该在他们发布的带有用户名的“声明”中找到。Evaluate.ClaimsCustomUserValidator

但是,我已经完全按照您在之前的工作中所描述的做了 - 并且 IIRC 它工作得很好,使用上面的页面作为我的起点。

一旦您发布了委托人,它将像往常一样通过以下方式提供:

string cn = Thread.CurrentPrincipal.Identity.Name;
于 2012-04-25T12:02:10.280 回答
0

要通过单个 WCF 请求存储任何类型的数据,Darin Dimitrov 建议在此处将一个简单的IExtension<>帮助程序类连接到当前OperationContext在哪里存储当前 WCF 调用的数据?

于 2013-04-12T13:38:11.957 回答