Windows Redisサービス(Redis 3.0.504)をキャッシュサーバーとして使用しており、パスワードで「requirepass」変数を設定することでパスワード検証を有効にしました。初めてのパスワード確認が成功した後、もう一度パスワードを確認しないようです。
しかし、私はそれをテストすると、クライアントからのパスワード認証が成功した後、すべてのクライアントのパスワードチェックを停止しているように見えます。
私の実装では、IRedisClientへのラッパーとしてServiceStack Webサービスを使用しています。セキュリティサービスの脆弱性のためにローカルアクセスのためにredisサーバーを保持できるように、クライアントをキャッシュするためにWebサービスを公開します。
Webサービスでは、私は、Redisクライアント(IRedisClient)を取得する要求に対してPooledRedisClientManagerオブジェクトのインスタンスの依存性注入にcastle windsorを使用しています。コードは次のようになります。Webサービスのinitで
:サービスコントローラーで
container.Register<IRedisClientsManager>(c => new PooledRedisClientManager("[email protected]:6379"));
、以下のようにRedisのクライアントを取得するために:私はRedisのであるかどうかを確認していない
public MyServiceResponse Any(MyServiceRequest request)
{
...
var redisClientsManager = HostContext.Resolve<IRedisClientsManager>();
using (IRedisClient redisClient = redisClientsManager.GetClient())
{
redisClient.Password = request.Password;
...
}
...
}
パスワード検証を実行できない、またはソリューション/実装に欠陥または問題があります。
ありがとうございます!
ありがとうmythz!私の設計はWebサービスをRedisのクライアントだけにしているようですから、WebサービスがRedisサーバーに最初から正常に接続している限り、その時点から検証されたクライアントです。また、すべての外部 "キャッシュクライアント"は、実際には、レディスではなくウェブサービスに対する "異なる"クライアントです。私の理解は正しいのですか? – StevenC
@StevenCクライアントではありませんが、個々のクライアントはTCP接続を再開します。プールされたRedis Clients Managerを使用する場合、これらのredis TCP接続はバックグラウンドでプールされ(そして再利用されます。 – mythz
参照してください。 PooledRedisClientManagerのインスタンスを作成し、Webサービスが稼働しているときに再利用できるように保存しています。そのため、プールされたRedisクライアントマネージャは一度接続してから接続を再利用します。私はRedisのキャッシュが新しく、毎回要求ごとに認証用のパスワードを使用したいのですが、毎回要求ごとにPooledRedisClientManagerを再作成する必要がありますか? – StevenC