检索WCF服务中当前经过身份验证的用户

时间:2010-09-07 16:38:27

标签: c# wcf

今天,我为我的WCF服务实现了自定义身份验证提供程序。它能够确定我的用户是否有效,正如预期的那样。

所以,现在我有这个课程:

public class MyCustomValidator : UserNamePasswordValidator
{
    public override void Validate(string userName, string password)
    {
        User apiUser = User.Login(userName, password);

        // other logic goes here.
    }
}

我的应用程序的行为取决于用户可以访问的对象。那么,我如何从这里获取我的User对象到我的服务类?我没有看到明显的方式,因为我的服务类默认不会从ASP.NET控制器继承任何东西。

我的第一直觉是在MyCustomValidator中设置一个静态参数,然后从那里读取它,但我怀疑可能会出现竞争条件。任何人都可以证实或否认我的怀疑吗?

最重要的是:有更好的方法吗?这是我第一次使用WCF,所以我不知道这里涉及的最佳实践。

感谢您的时间。

1 个答案:

答案 0 :(得分:1)

您希望将一些数据从验证程序传递到服务实例。这很糟糕,因为你不能这样做。 UserNamePasswordValidator仅用于验证凭据(用户名和密码)。您无法访问验证程序中的任何内容。它甚至看不到当前的操作上下文,因为它在不同的线程中运行。使用静态参数不是一种愚蠢 - 正如你所提到的那样是竞争条件。

我认为您需要实施自定义身份验证和授权,这并不容易: WCF AuthorizatonCustom AuthorizationCustom credentials and validation