web-dev-qa-db-ja.com

iOS:資格情報を渡すために安全なHTTPS接続を確立する方法は?

私は最初のiPadアプリを作成しています。私は、RESTfulな方法で認証してデータをプルしたいWebアプリケーションを持っています。

ブラウザでURLを開くと( https://myapp.com/auth/login )、ユーザー名とパスワードを入力するためのフォームが表示されます。リクエストの投稿データにログイン認証情報を設定して送信できると思っていました。

このサイトはログインにHTTPSを使用しているため、資格情報がインターネット上でプレーンテキストで渡されることはありません。

資格情報を渡すために安全なHTTPS接続を確立するにはどうすればよいですか?これは、私が将来のリクエストのためにログインしていることを覚えていますか?これを行うための最良の方法は何ですか?

17
Andrew

さらなる更新、2013年10月

私がこの回答を書いた時点では、ASIHTTPRequestは広くサポートされていましたが、現在はそうではありません。新しいプロジェクトにはお勧めしません。代わりに、NSURLConnectionを直接使用するか、AFNetworkingを使用してください。

AFNetworkingには、http認証用の[httpClient setAuthorizationHeaderWithUsername:username password:password];メソッドがあり、POSTスタイルフォームの作成も同様に簡単です。 AFNetworkingPost Request を参照してください。


元の回答:

多くの人がASIHTTPRequestクラスを使用してiPhone/iPadのhttp&httpsを処理します。これは、組み込みクラスでは実現が困難または時間がかかる便利な機能が多数あるためです。

http://allseeing-i.com/ASIHTTPRequest/

最も単純なレベルから始めて、次のようなものから始めます。

  NSURL *url = [NSURL URLWithString:@"http://allseeing-i.com"];
  ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

  [request startSynchronous];
  NSError *error = [request error];
  if (!error) {
      NSString *response = [request responseString];
      NSLog(@"response = %@", response);
  }

HTTP認証を使用している場合、ASIHTTPRequestは自動的にユーザーにユーザー名とパスワードの入力を求めます。

他の形式の認証を使用している場合は、ユーザー自身にユーザー名とパスワードを要求し、それらをPOST値またはカスタムhttpヘッダーとして送信してから、応答する必要があります。 JSONまたはXML応答にトークンを含めるか、Cookieを設定することができます。

認証スキームがどのように機能するかについてさらに詳細を追加すると、もう少し具体的にすることができます。

更新

更新に基づいて、POSTフォームをエミュレートするには、次のような行を追加する必要があります。

[request addPostValue:usernameString forKey:@"username"];
[request addPostValue:passwordString forKey:@"password"];

また、次の代わりに、リクエストの作成方法を変更する必要があります。

  ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];

行う:

  ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

(また、上記で言及するのを忘れています。以前に配置したコードは同期要求を使用しているため、機能していることが証明されたらUIがブロックされないように、非同期要求に置き換えます。)

ここにiPhone用のJSONフレームワークがあります:

http://code.google.com/p/json-framework/

これは私にとってはうまく機能し、ASIHTTPRequestで簡単に使用できます。

13
JosephH