代码之家  ›  专栏  ›  技术社区  ›  Sylvain

如何在WCF中存储有关已验证用户的信息?

  •  3
  • Sylvain  · 技术社区  · 15 年前

    我有一个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中,但我觉得这不是应该如何完成的。

    1 回复  |  直到 15 年前
        1
  •  2
  •   marc_s Hady Salah    15 年前

    将任何需要持久化的东西存储到持久化存储中——例如数据库,这是最好的方法。

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

    您应该尽可能地争取拥有一个无状态的WCF服务——它不应该依赖于任何类型的“状态”,而不是安全存储在数据库中的状态。