2016-08-05 15 views
3

Apache Thriftを使用するプロジェクトにセキュリティを追加しようとしています。 C#には、TSocket、ユーザー名、およびパスワードのパラメータを受け入れるクラスTSASLClientTransportがあります。同様に、私はC++で同じものを実装できるように、私はcppクラスが必要です。C++のユーザー名/パスワード認証を使用したThrift sasl

私はこのタスクhttps://issues.apache.org/jira/browse/THRIFT-1667に出くわしましたが、まだ開いています。しかし、このタスクで利用可能なパッチがあります。このパッチを使用して、私はTsaslTransportクラスをインポートしましたが、ここにユーザー名/パスワードを提供する方法が見つかりません。可能であれば、誰でもこの事例を共有することができます。

また、C++を使用して簡単なユーザー名/パスワード認証を提供する方法はありますか?

ここにCyrus-SASLを使用できますか?

ご協力いただきまして誠にありがとうございます。

答えて

0

いくつかの調査の後、私は実際の解決策を見つけました。私はApache THRIFTからのパッチと共にcyrus-saslプロジェクトを使用しました。

まず、安全なクラスタでハイブサービスを実行しているTTransportを作成します。

boost::shared_ptr<TTransport> socket(new TSocket("hive_host", hive_port)); 
boost::shared_ptr<TTransport> transport(new TBufferedTransport(socket)); 

クライアントで& 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(); 

成功したオープンでは、あなたは正しいユーザー名とパスワードを指定したセキュアクラスタと通信することができるようになります。

関連する問題