首次成功验证密码后,Redis似乎不再检查密码

时间:2017-09-25 17:15:07

标签: web-services redis passwords

我使用Windows Redis服务(Redis 3.0.504)作为我的缓存服务器,并通过使用密码配置变量“requirepass”来启用密码验证。

但是当我测试它时,似乎redis服务器在从任何客户端成功验证密码后停止检查所有客户端的密码,感觉就像成功的密码验证只是为所有人解锁了Redis服务器。

在我的实现中,我使用ServiceStack Web服务作为IRedisClient的包装器,并且只将我的web服务暴露给缓存客户端,这样我就可以将redis服务器保留为本地访问权限,因为它的安全漏洞。

在Web服务中,我使用castle windsor为获取redis客户端(IRedisClient)的请求依赖注入PooledRedisClientManager对象的实例。代码类似于以下内容:

在web服务初始化:

container.Register<IRedisClientsManager>(c => new PooledRedisClientManager("password@localhost:6379"));

在服务控制器中,获取如下的redis客户端:

public MyServiceResponse Any(MyServiceRequest request)
{
     ...
     var redisClientsManager = HostContext.Resolve<IRedisClientsManager>();
     using (IRedisClient redisClient = redisClientsManager.GetClient())
     {
         redisClient.Password = request.Password;
         ... 
     }

     ...
}

我不确定Redis是否无法执行密码验证,或者我的解决方案/实施中存在缺陷或问题。

谢谢!

1 个答案:

答案 0 :(得分:0)

Redis使用AUTH command强制执行其密码,经过验证后,它允许从该点开始访问连接的所有Redis操作。

在ServiceStack.Redis中,密码应为specified on the Connection String,以确保每个与Redis的新连接都使用指定的密码进行身份验证。您不必担心在App的逻辑中指定密码,因为它是为池中创建的每个新Redis连接自动提供的。

注意:在ServiceStack服务中访问Redis的推荐API是使用base.Redis属性,例如:

public object Any(MyServiceRequest request)
{
     ...
     var value = Redis.GetValue(key);
}