2012-03-05 1 views
1

私はWebサービスを開発しています。現在、どのエンドユーザーがリクエストを実行しているかを知ることができます。したがって、本質的に暗黙的なユーザー(またはユーザーのデバイスである可能性もあります)の識別が必要です。途中の(例えばプロキシ)サーバーの人が何かを偽装しないようにします

私のWebサービスは認証を必要としません。ユーザーはモバイルデバイスとWebサービスの間にプロキシサーバーを配置し、そのプロキシサーバーを通じてすべてのトラフィックをルーティングする可能性があります。私は多くの理由があるかもしれないので、ユーザーがそれをすることを禁止したくないですが、私はまだどのデバイスが現在接続しているか知りたいと思います。

一部の暗号化が必要な可能性がありますか?

答えて

1

これを行うための標準的な方法は、最初にWebサービスにHTTPSを使用することです。これは、サーバーがクライアントに対して自身を認証し、接続が暗号化され、認証されることを意味します。

サーバーがクライアントに対して認証され、接続が暗号化されて認証されると、クライアントをサーバーに認証するメソッドを簡単に追加できます。最も簡単な方法は、各要求にプレーンテキストのユーザーIDとパスワードを含めることです。クライアントが適切なサーバーに送信され、接続が暗号化されていることをクライアントが認識しているため、これは安全です。

正しく設定されたプロキシサーバは、HTTPSトラフィックのトンネリングを許可します。これは問題ではありません。

+0

悪いことに、このプロキシサーバーは、ユーザー自身がインストールしてリクエストを変更し、ユーザーのデバイスが別のものとしてふりをすることができるということです。私が解決しようとしている問題は、ユーザーが喜んで偽装している可能性があるので、悪意のある人物とは異なります。だから私はこの場合に私のサーバーを守ろうとしています。 編集:いくつかの調査の後、この問題は私のケースでは解決できないと結論づけました。最善の方法は、ユーザーが喜んで自分自身を特定する場合に、ユーザーに利益を提供することでユーザーを信頼させることです。 –

+0

HTTPSはエンドポイントのセキュリティを提供します。プロキシはHTTPSトラフィックを変更することはできませんが、トンネルを通過するだけです。つまり、デバイスに独自のSSL/TLSが実装されていない場合、暗号化される前に敵対者が通信に参加する他の方法があるかもしれません。一般的に言えば、敵対者にあなたが彼から守りたいと思っているリソースにアクセスできるようにするのは建築上の失敗です。 –

+0

私の場合、私は何も保護したくありません(保護は実際にHTTPSを使って実装されています)。私は単にエンドユーザーの一意のIDを持つ必要があります。ユーザー名とパスワードは、多くのデバイスが同じユーザー名とパスワードで接続できるので、この場合は機能しません。セッションはステートレスなサービスであるため、活用することはできません。私たちの場合、ユーザーは独自の信頼できる証明書を使用してプロキシサーバーをセットアップし、それを介して日付を転送することができ、したがって識別が不可能になります。ユーザーが真実から利益を得ることを可能にすることは、これまでのところ良い解決策のように思えます。 –

0

Webサービスへのアクセスを1つのアプリケーションに許可しようとしていると聞こえます。これを行う1つの方法は、クライアント認証を使用するTLSです。このため、クライアント(アプリケーション)は自身の秘密鍵証明書のペアを持つ必要があり、サーバーは秘密鍵の所有権が証明されている場合にのみアクセスを許可します。これは、サーバーのデフォルトの検証とまったく同じPKIを使用します。

この利点は、クライアント認証がトランスポートレベルのプロトコルであるため、アプリケーション自体にセキュリティレイヤーを追加する必要がないことです。 TLSで保護されているURLに到達することはできません。欠点は、設定が難しいプロトコルがあり、鍵配布が少し難しくなることです(Henrickが提案したようにトークン認証を使用すると、トークンを秘密に配布する必要があります...)。

ほとんどのアプリケーションサーバーは、クライアント認証を処理できる必要があります。詳細については、hereの「クライアント認証TLSハンドシェイク」を参照してください。

関連する問題