我有一个wcf服务,我在其中使用customUsernamePasswordValidatorType(在web.config文件的behaviors\service behaviors\servicecredentials\usernameauthentication部分中指定)。
我的自定义用户名密码验证程序就是这样工作的:
public bool Authenticate(string userName, string password)
{
If ( IsUserValid(username, password) )
{
UserInfo currentUser = CreateUserInfo(username);
//
// Here I'd like to store the currentUser object somewhere so that
// it can be used during the service method execution
//
return true;
}
return false;
}
在服务调用执行期间,我需要访问经过身份验证的用户的信息。例如,我希望能够实现:
public class MyService : IService
{
public string Service1()
{
//
// Here I'd like to retrieve the currentUser object and use it
//
return "Hello" + currentUser.Name;
}
}
我的问题是,在身份验证过程中,我应该如何以及在何处存储信息,以便在调用执行过程中访问这些信息?只要“会话”有效,该存储就应该持续。
顺便说一下,我不使用(也不想使用)安全会话和/或可靠会话。所以我关闭了EstablishSecurityContext和ReliableSessions。
我正在考虑启用ASP.NET兼容模式,将用户信息存储在httpContext.current.session中,但我觉得这不是应该如何完成的。