Экономный sasl с аутентификацией по имени пользователя и паролю для C++
Я пытался повысить безопасность своего проекта, который использует Apache Thrift. В C# есть класс TSASLClientTransport, который принимает параметры TSocket, имя пользователя и пароль. Точно так же мне нужен класс cpp, чтобы я мог реализовать то же самое в C++.
Я столкнулся с этой задачей https://issues.apache.org/jira/browse/THRIFT-1667, которая все еще находится в открытом состоянии. В этой задаче есть патч. Используя этот патч, я импортировал класс TsaslTransport, но не могу найти здесь имя пользователя / пароль. Если возможно, кто-нибудь может поделиться любыми примерами по этому вопросу
Или есть способ обеспечить простую аутентификацию имени пользователя / пароля в Thrift с использованием C++?
Можно ли использовать Cyrus-SASL здесь?
Любая помощь с благодарностью.
1 ответ
После некоторого расследования я нашел рабочее решение. Я использовал проект cyrus-sasl вместе с патчем от Apache THRIFT.
Сначала создайте TTransport со службой улья, работающей в безопасном кластере.
boost::shared_ptr<TTransport> socket(new TSocket("hive_host", hive_port));
boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket));
Создайте массив обратных вызовов, чтобы получить имя пользователя от & simple и пароль от & getsecret в клиенте.
static sasl_callback_t callbacks[] ={
{
SASL_CB_USER, (sasl_callback_ft)&simple, NULL
}, {
SASL_CB_AUTHNAME, (sasl_callback_ft)&simple, NULL
}, {
SASL_CB_PASS, (sasl_callback_ft)&getsecret, NULL
}, {
SASL_CB_LIST_END, NULL, NULL
}
};
Используйте libSaslClient из saslimpl.cpp, чтобы выбрать механизм и сервис. Это инициализирует клиента. И используйте этот клиент в TSaslTransport, чтобы открыть соединение и связаться с сервером.
map<string, string> props;
sasl::libSaslClient libSaslClient("PLAIN", "", "ldap", "host", props, callbacks);
boost::shared_ptr<TSaslTransport> tsaslTransport(new TSaslTransport(&libSaslClient, transport));
tsaslTransport->open();
tsaslTransport->close();
При успешном открытии вы сможете общаться с защищенным кластером, указав правильное имя пользователя и пароль.