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

标签 c# wcf web-services session

我正在为我的 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/

相关文章:

Android、KSoap2 和 .NET Web 服务 w/parameters = NULL 结果

c# - 将 C# 正则表达式代码转换为 Java

c# - 如何将其他文件发布到 bin 文件夹中

c# - 调用ASP.NET页面的WCF方法OnUnload

java - 发送证书

r - 如何使用opencpu在R中传递参数

c# - YouTube C# .NET API : Uploading video and getting events when finished

c# - 在 MVC 5 Razor 中使用 ChartJs

c# - 默认情况下 WCF 服务是无状态的吗?

wcf - 如何公开具有多种服务行为的单个 WCF 服务?