gpt4 book ai didi

authentication - 具有 C++ 用户名/密码身份验证的 Thrift sasl

转载 作者:行者123 更新时间:2023-12-04 06:48:23 25 4
gpt4 key购买 nike

我一直在尝试为我使用 Apache Thrift 的项目增加安全性。在 C# 中,有一个类 TSASLClientTransport 接受参数 TSocket、用户名和密码。同样,我需要一个 cpp 类,以便我可以在 C++ 中实现相同的类。

我遇到了这个任务 https://issues.apache.org/jira/browse/THRIFT-1667 ,仍处于打开状态。不过,此任务中有可用的补丁。使用此补丁程序,我导入了 TsaslTransport 类,但我找不到在此处提供用户名/密码的方法。如果可能,任何人都可以分享这方面的任何例子。

或者有没有一种方法可以使用 C++ 在 thrift 中提供简单的用户名/密码身份验证?

可以Cyrus-SASL在这里使用?

非常感谢任何帮助。

最佳答案

经过一些调查,我找到了一个可行的解决方案。我用过cyrus-sasl项目以及来自 Apache THRIFT 的补丁.

首先创建一个 TTransport,其中包含在安全集群中运行的 Hive 服务。

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
}
};

使用 saslimpl.cpp 中的 libSaslClient 选择机制和服务。这将初始化客户端。并在 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();

成功打开后,您将能够通过正确的用户名和密码与安全集群进行通信。

关于authentication - 具有 C++ 用户名/密码身份验证的 Thrift sasl,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38781606/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com