2012-01-31 19 views
1

これは奇妙なものです。私は私の会社で管理するための簡単なiPhoneアプリケーションを開発し、リアルタイムの売上統計を確認しました。最初のハードルは、古いMSSQL 2005サーバーと通信するためのアプリの入手方法を理解することでした。いくつかの研究の後、レスポンスを最速の方法で実行するように思えたのは、response.write()呼び出しでクエリ結果を吐き出す基本的なASPページを作成することでした。実際にはうまくいきますが、結果を返すASPページは世界中に公開されています。私が得た唯一の「セキュリティ」メカニズムは、サーバー側のHTTPポートを変更することではありません。ASPページとCocoa/ObjC間の安全な通信

私の質問は - これのベストプラクティスは何ですか? ASPとObjective-Cの間で何がうまくいくのでしょうか?私はいくつかの基本的なチャレンジレスポンス、暗号化などを読んだことがありますが、一般的に理解できない販売番号の単純な文字列の場合は過剰なようです。しかし、アプリケーションがより複雑なものに発展するにつれて、ASPがより機密性の高いデータを送り返す前に、この問題を解決したいと思います。

ここにサーバーコードとの接続が役立ちます。定数はちょうどそこにあるので、POSTデータを追加して、アプリケーションから必要なものに基づいてさまざまな統計情報を取得することができます。これのロジックは他の場所であり、それほど重要ではありません。

NSString * const appDataUrl = @"http://{the url for the asp page}"; 

//Don't ask me how this works. Google FTW... 
-(NSString *) pullData:(NSString *) url { 
    NSError * error = nil; 
    NSURLResponse * response = nil; 
    NSData * downloadedData = 
     [NSURLConnection sendSynchronousRequest: 
     [NSURLRequest requestWithURL: 
      [NSURL URLWithString:url]] returningResponse:&response error:&error]; 
    NSString *strData = [[NSString alloc]initWithData:downloadedData encoding:NSUTF8StringEncoding]; 
    return strData; 
} 

ありがとうございます。

+0

ようこそStackOverflow!お気軽に[FAQ](http://stackoverflow.com/FAQ)を読んで、しばらくお待ちください。また、ユーザー名とグラバターを選ぶことを躊躇しないでください。 – Moshe

答えて

3

リクエストごとにユーザー名とパスワードを追加するHTTP認証(例:ダイジェスト)を使用できます。 Objective-Cに関連するダイジェストトークンを生成するのに必要なライブラリがあるかどうかわかりませんが、そうでなければ、利用できるHTTPライブラリのうちの1つを使用できます。

IIS内で必要な認証を追加して、ユーザー名とパスワードを知っているユーザーだけがそのURLにアクセスできるようにすることができます。

これを実行する別の方法は、特別なランダム値(定義済みのGUID)でX-AuthなどのObjective-CのHTTPリクエストに特別なヘッダーを追加することです。

リクエストはその特別なヘッダーとともに送信され、その存在とその値をASPで確認できます。

SSLを追加して、HTTPS経由でこのリクエストにアクセスできるようにして、誰もデータを盗聴できないようにすることをお勧めします。

+0

優秀な、それは今のところ最高の解決策のように聞こえる。だから、基本的には、 "http://myurl.com?auth=blahblahblahsomethingcrazy"にその定数を設定し、私のASPコードでチェックしてからSSLを使ってその情報ストリームを隠すようなことができます。もっとSSLを研究する必要があります。 – alukaiser

+0

何も保存されないようにするには、 "auth"パラメータを使用して目的コードからHTTP POSTを実行するか、HTTPヘッダー(URLクエリパラメータではありません)を渡します。 –

1

SSLで通信をラップします。

あなたのユースケースに基づいて、あなたのアプリケーション(iPhone上で動作している)だけがあなたのWebサービスにアクセスできるようにしたいとします。これを行うには、アプリケーションとASPサービスが実行されているWebサーバーのエンドポイントとの間で相互認証されたSSLを構成します。あなたのアプリケーションがあなたのサーバと通信するだけであれば、CA発行のSSL証明書は必要ありませんが、自己署名証明書を使用できます。自分のサーバーに自己署名のID証明書を配備し、自己署名入りのクライアントID証明書をリソースとしてアプリケーション内に配備します。クライアント証明書を要求し、発行したものとアプリが使用しているものだけを許可するようにサーバーを設定します。これにより、サーバーはクライアントアプリケーションからの要求のみを受け入れます。サーバーに展開されているサーバー証明書のみを信頼するように(つまり、サーバーと通信してこのデータを取得できるように)、接続時にクライアント証明書を提示するようにクライアントを構成します。その後、アプリだけがあなたのサーバーを呼び出すことができます。クライアントは有効なソースからデータを取得することができ、トランザクション全体が暗号化され、認証されます。

+0

+1ユーザ名/パスワードを埋め込まないか、人がiDeviceにそれらを入力しないようにするため+1。 –

関連する問題