在 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安德烈亚斯

在 WCF 请求中存储数据的位置

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

但是,我已经完全按照您在以前的工作中描述的内容完成了 - IIRC使用上面的页面作为我的起点,它工作得很好。

一旦您发出了本金,它将像往常一样通过以下方式提供:

string cn = Thread.CurrentPrincipal.Identity.Name;

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