2017-06-03 2 views
0

私は、マルチスレッドJavaアプリケーションからVTiger(6.4)Webサービスを呼び出しています。私はWebサービスを呼び出す必要があるたびに、VTからチャレンジトークンを取得してからログインし、最後にクエリを実行します。チャレンジトークンはVtiger Web Servicesで実際にどのような目的を果たしますか?

VT Webサービスのコードを見てみると、あるスレッドによって取得されたトークンがVTのデータベースで第2のスレッドで取得されたトークンによって上書きされるため、上記は「スレッドセーフ」ではないようです。 Javaアプリケーションが、VTログインWebサービスが呼び出されたときにスレッドの実行順序を逆転させた場合、これらの呼び出しの1つが間違ったトークンで失敗することになります。

など、私は私は私のアプリ内でトークンをキャッシュすることができることを実感...しかし、それは共有ストレージのミューテックスのロックを実装する意味

だから、私の質問は:チャレンジトークンは本当にのvtigerのに多くのセキュリティを追加していウェブサービス?または、バイパスすることができますか?

答えて

1

トークンは、セッションが盗まれるのを防ぎます。そのトークンの代わりに、すべての呼び出しでaccessKeyを使用しますが、Vtiger Webservicesはそのように構築されていません。

vtigerのベースコードで認証コードを変更すると、これは確実にバイパスできます。少なくとも2つのファイル

vtiger_root/include/Webservices/AuthToken.php 

vtiger_root/include/Webservices/Login.php 

を変更する必要があります私はあなたがスレッド間で単一のトークンを共有すべきだと思います。セッション確立を実装するためにシングルトンを使用するかもしれません。

+0

ありがとうございました。それは役に立ちます。 VTigerを識別プロバイダとして使用して、いくつかのアプリケーション(JavaベースのWebアプリケーションとWordPressサポートサイト)でSSOを実装したいと考えています。特に、Javaアプリケーションは、複数のサーバーにまたがることができます。だから、セッション確立のためのシングルトンはそれほど単純ではありません。 – MSquared

+0

複雑な音がします。セキュリティに関しては、トークンを削除するのが安全でないかどうかはわかりません。あなたがこれを解決する方法を聞くのは興味深いでしょう。 –

+0

現時点では、実際の衝突の可能性が低いため、そのまま使用するつもりです。長期的な修正:Webサービスを 'preLogin'に切り替えて、チャレンジ/ログインを実行する必要はありません。次に、Amazon S3と同様に、追加のリクエストパラメータとして 'expires time'値を追加します。 hmacとAccessKeyを使用してリクエストの全内容に署名します。リクエストとともにサインを送信します。サーバー上で、AccessKeyを使用してサインを再計算します。署名が正しい場合(要求が改ざんされていない)、期限がまだ切れていない場合は、要求を実行します。また、「チャット」を少なくする – MSquared

関連する問題