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

标签 web-services redis passwords

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

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

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

在 web 服务中,我使用 caSTLe windsor 来依赖注入(inject) PooledRedisClientManager 对象的一个​​实例,用于获取 redis 客户端 (IRedisClient) 的请求。代码类似如下:

在网络服务初始化中:

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

在service controller中,获取redis client如下:

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

     ...
}

我不确定是 Redis 无法强制执行密码验证,还是我的解决方案/实现存在缺陷或问题。

谢谢!

最佳答案

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

在 ServiceStack.Redis 中,密码应该是 specified on the Connection String它将确保每个与 Redis 的新连接都使用指定的密码进行身份验证。您无需关心在应用程序逻辑中指定密码,因为它会自动为池中创建的每个新 Redis 连接提供。

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

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

关于web-services - 首次成功验证密码后,Redis 似乎不再检查密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46410690/

相关文章:

c# - 使用 SOAP、Javascript、C#、Webservices、jQuery 的 Windows Gadget for Sharepoint 2007 列表

c# - 如何创建一个 web.config 文件来加载 SoapExtension?

mysql - 在 MySQL 5.6 中重置 ROOT 密码

python - 使用没有RSA key 的python ssh

java - JAX-WS - 如何创建类型为 xs :any from server side code? 的元素

java - SSL 握手失败错误

redis - 提高 Redis 写入性能的选项

node.js - connect-redis - 如何保护 session 对象免受竞争条件的影响

redis - REDIS 中的管道集操作

python - 密码盐和 secret