酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

iOSでNSURLConnectionクラスを使用したダイジェスト認証処理

本記事は「NSURLConnectionクラスを使ってダイジェスト認証をおこなう - iOSアプリ開発の逆引き辞典」に転記しました。


「iPhoneの標準APIではダイジェスト認証をさせることは出来ないのでは?」と疑問に思ったので調べてみました。ユーザー名もパスワードも決め打ちなので、その辺り良くないサンプルコードですが、ダイジェスト認証を行う事が可能でした。

NSURLConnectionクラスを使ったダイジェスト認証処理をサンプルページ付きで紹介されているhtaccess によるアクセス制限「Digest認証」ダイジェスト認証 BIG-server.com 簡単スクリプト集をお借りして試してみました。

#define USER_NAME @"big-server"
#define PASSWORD @"test"

// http://www.maido3.com/server/script/htaccess-digest.html 
// の紹介で使われているサンプルURLを利用させて頂きました
-(IBAction) ClickedButton
{
  NSURL *URL = [NSURL URLWithString:@"http://www.maido3.com/server/script/digest/"];
    NSURLRequest *request = [NSURLRequest requestWithURL:URL];
    NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
    [connection start];
}

// 認証
-(void)connection:(NSURLConnection *)connection didReceiveAuthenticationChallenge:(NSURLAuthenticationChallenge *)challenge 
{
    if ([challenge previousFailureCount] == 0) {
        NSURLCredential* newCredential = [NSURLCredential credentialWithUser:USER_NAME 
																	password:PASSWORD 
																 persistence:NSURLCredentialPersistenceNone];
        [[challenge sender] useCredential:newCredential forAuthenticationChallenge:challenge];
    } else {
        [[challenge sender] cancelAuthenticationChallenge:challenge];
    }
}

// レスポンスデータの受信
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    NSString* content = [NSString stringWithUTF8String:[data bytes]];
    NSLog(@"%@", content);
}