我使用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是否无法执行密码验证,或者我的解决方案/实施中存在缺陷或问题。
谢谢!
答案 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);
}