如何在WCF中存储有关经过身份验证的用户的信息?

时间:2009-12-11 21:43:21

标签: wcf authentication

我有一个WCF服务,我在其中使用customUserNamePasswordValidatorType(在web.config文件的behaviors \ serviceBehaviors \ serviceCredentials \ userNameAuthentication部分中指定)。

我的自定义UserNamePasswordValidator以这种方式工作:

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;
    }
}

我的问题是在身份验证过程中如何以及在何处存储信息,以便在呼叫执行过程中可以访问它?只要“会话”有效,该存储应该持续。

顺便说一下,我不使用(也不想使用)安全会话和/或可靠会话。所以我关闭了establishSecuritytContext和reliableSessions。

我正在考虑启用ASP.NET兼容模式以将用户信息存储在HttpContext.Current.Session中,但我觉得不应该如何完成。

1 个答案:

答案 0 :(得分:2)

将任何需要持久存储的内容存储到持久性存储中 - 例如数据库,这是最好的方式。

将用户信息存储在用户表中,例如ASP.NET会员系统或您自己的东西。保留某种识别令牌(用户名,ID等),以便在需要时从数据库中检索该信息。

您应该尽可能地努力获得无状态WCF服务 - 除了安全存储在数据库中的“状态”之外,它应该永远不依赖于任何类型的“状态”。