サードパーティのクライアントがサーバーにアクセスできないようにしたいクライアント/サーバー iPhone ゲームを構築しています。これには 2 つの理由があります。1 つ目は、私の収益モデルはクライアントを販売し、サービスを提供することです。2 つ目は、不正行為を助長するクライアントの急増を避けたいということです。
私はサーバーの最初のバージョンを Rails で書いていますが、ある時点で erlang に移行することを検討しています。
私は2つのアプローチを検討しています:
「ユーザー名」(GUID など) を生成し、アプリに付属のシークレットでハッシュ (SHA256 または MD5) し、その結果を「パスワード」として使用します。クライアントがサーバーに接続すると、両方が https 経由の HTTP 基本認証を介して送信されます。サーバーは同じシークレットでユーザー名をハッシュし、それらが一致することを確認します。
iPhone アプリでクライアント証明書を送信します。サーバーは、クライアント証明書が存在することを要求するように構成されています。
最初のアプローチには、シンプルでオーバーヘッドが少ないという利点があり、アプリ内のシークレットを難読化するのが簡単になる場合があります。
2 番目の方法は十分にテストされ、証明されていますが、オーバーヘッドが高くなる可能性があります。ただし、クライアント証明書に関する私の知識は、「デルタ航空の機内誌で読む」レベルです。これにより、どのくらいの帯域幅と処理のオーバーヘッドが発生しますか? リクエストごとに転送される実際のデータは、キロバイトのオーダーです。