今天,我为我的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,所以我不知道这里涉及的最佳实践。
感谢您的时间。
答案 0 :(得分:1)
您希望将一些数据从验证程序传递到服务实例。这很糟糕,因为你不能这样做。 UserNamePasswordValidator仅用于验证凭据(用户名和密码)。您无法访问验证程序中的任何内容。它甚至看不到当前的操作上下文,因为它在不同的线程中运行。使用静态参数不是一种愚蠢 - 正如你所提到的那样是竞争条件。
我认为您需要实施自定义身份验证和授权,这并不容易: WCF Authorizaton,Custom Authorization,Custom credentials and validation