Я работаю над Mosquitto и планирую использовать Redis в качестве серверной части для обработки аутентификации пары имя пользователя/пароль и ACL. Для этого я использую плагин аутентификации JPmens. Аутентификация работает хорошо, но я не могу заставить работать ACL. Redis использует уникальные ключи, а имена пользователей (ключи в моем случае) используются в парах имя пользователя/пароль для целей аутентификации. Я пытался смешать имя пользователя, пароль и темы вместе в наборах/списках, но ни один из них не работает.
комар конф:
auth_plugin /etc/mosquitto/auth-plug.so
auth_opt_backends redis
auth_opt_redis_host 127.0.0.1
auth_opt_redis_port 6379
auth_opt_redis_userquery GET %s
auth_opt_redis_aclquery GET %s-%s
Следующие пары имя/пароль отлично работают для аутентификации
SET user1 PBKDF2$sha256$901$Qh18ysY4wstXoHhk$g8d2aDzbz3rYztvJiO3dsV698jzECxSg
SET user2 PBKDF2$sha256$901$R74X2ae3MufMS20M$CAbXZFDmXJN7Cc28Dm/Z97OfM8Tz1JHn ...
Следующие настройки не будут работать для ACL: (a/b... как темы)
sadd user22 PBKDF2$sha256$901$Qh18ysY4wstXoHhk$g8d2aDzbz3rYztvJiO3dsV698jzECxSg a/b c/d
rpush user33 PBKDF2$sha256$901$q5/N74O6Iaf/e8Cg$dEA3tZSi/sJeXKAkX39Gd3agy2WY96gE e/f
Как правильно это сделать? В API Redis aclrequery
показывает, что:
Single stepping until exit from function be_redis_aclcheck, which has no line number information.
redisCommand (c=0x6537d0, format=0x6561c0 "GET user1-t/c") at hiredis.c:1345
1345 void *redisCommand(redisContext *c, const char *format, ...) {
(gdb) bt
0 redisCommand (c=0x6537d0, format=0x6561c0 "GET my-t/c") at hiredis.c:1345
1 0x00007ffff5e61376 in be_redis_aclcheck () from /etc/mosquitto/auth-plug.so
2 0x00007ffff5e5c351 in mosquitto_auth_acl_check ()
из /etc/mosquitto/auth-plug.so
Здесь user1
— имя пользователя, а t/c
— тема. GET user1-t/c
, кажется, говорит мне, что в базе данных Redis ожидается строковый тип. Может ли кто-нибудь дать мне пример того, как заставить это работать?
Спасибо